Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
TemKa_SD

Получение текущих настроек из файла

Рекомендованные сообщения

05/10/19 20:08 (изменено)

Здравствуйте, я хочу переписать тут функцию получения настроек, сейчас оно реализовано чужим кодом:

 

	if ( isset( $this->botID ) and file_exists( \IPS\wc3\Bot::BOT_PATH . $this->botID . '/gcb/gcb.cfg' ) ) {
		$fh = fopen( \IPS\wc3\Bot::BOT_PATH . $this->botID . '/gcb/' . "gcb.cfg", 'r');

		while(($buffer = fgets($fh, 4096)) !== false) {
			$buffer = trim($buffer);

			if(mb_strlen($buffer) > 3 && $buffer[0] != '#') {
				$index = mb_strpos($buffer, " =");

				if($index !== false) {
					$key = trim(mb_substr($buffer, 0, $index));
					$val = "";

					if(mb_strlen($buffer) > $index + 3) {
						$val = trim(mb_substr($buffer, $index + 3));
					}

					if(isset($key)) {
						$config[$key] = $val;
					}
				}
			}
		}

		fclose($fh);
	}

 

 

Оно в принципе работает, но много строк, мне так не нравится.

 

 

file_get_contents я думаю нет смысла использовать, чтение в строку мне не надо, нужен массив.

 

$file = file(\IPS\wc3\Bot::BOT_PATH . $this->botID . '/gcb/gcb.cfg');

 

Сейчас мне нужно разделить массив на ключ => значение, есть разделитель в файле '=': http://prntscr.com/nmytio

 

 

 

foreach ($file as $key) {
$skey = trim(mb_substr($key, 0, mb_strpos($key, " =")));
$svalue = trim(mb_substr($key, mb_strpos($key, " =")));
$settings[$skey] = $svalue;
}

 

 

Что скажите? какой код лучше использовать? http://prntscr.com/nmyz9w

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

Мне нужно комнаты поместить в массив 2 уровня, не получается, только одна комната заходит:

 

$settings = array();
foreach ($file as $key) {
$skey = trim(mb_substr($key, 0, mb_strpos($key, " =")));
$svalue = str_replace('= ', '', trim(mb_substr($key, mb_strpos($key, " ="))));
	if (static::garenaConfigurationConnectionKey($skey)) {
		$settings['rooms'] = [$svalue];
	}
	else {
		$settings[$skey] = $svalue;
	}
}

Поделиться сообщением


Ссылка на сообщение

У вас темы в последние время скатываются кудато от вопросов про IPS в сторону общего программирования.

Создайте что-ли одну темы про разные вопросы программирования в разделе не относящее к делу если вопросы не касаются конкретно кода IPS.

 

Често говоря не понимаю зачем тут строковые функции, когда можно разбить на key => value через функцию explode.

 

foreach( $file as $row )
{
   $bits = array_map( "trim", explode( "=", $row, 2 ) );
   $settings[ $bits[0] ] = $bits[1];
}

Поделиться сообщением


Ссылка на сообщение
05/11/19 05:02 (изменено)

Да, спасибо, это то что нужно. Я пробовал через explode, но не сообразил как разбить на key => value.

На счет тем, да, понял, это общая тема по php, в следующий раз учту при создании.

 

P.S.: Не получается еще комнаты в массив перевести: до http://prntscr.com/nn3at4 после http://prntscr.com/nn3b7e

 

foreach( $file as $row )
{
   $bits = array_map( "trim", explode( "=", $row, 2 ) );
if ( static::garenaConfigurationConnectionKey($bits[0])['key'] == "roomname" ) {
	$settings['rooms'] = [$bits[1]];
}
else {
	$settings[$bits[0]] = $bits[1];
}
}

 

Одна комната остается. Я так понимаю, тут цикл нужен?

Изменено пользователем TemKa_SD

Поделиться сообщением


Ссылка на сообщение

Не получается еще комнаты в массив перевести: до http://prntscr.com/nn3at4 после http://prntscr.com/nn3b7e

Потому что у Вас

$settings['rooms'] = [$bits[1]];

И с каждым разом значение $settings['rooms'] перезаписывается. Если там должен быть массив, то и создавайте массив

$settings['rooms'][] = [$bits[1]];

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Спасибо, я пробовал так, что-то не получалось...

Поделиться сообщением


Ссылка на сообщение

Как сделать, чтобы массив начинался с 1 а не 0 ?

Поделиться сообщением


Ссылка на сообщение

А смысл?

Использовать переменную счетчик $key с начальном значением 1. Или при присвоение первому элементу в массиве задать ключ 1.

Поделиться сообщением


Ссылка на сообщение

Да, сделал чуток по другому )

Поделиться сообщением


Ссылка на сообщение
05/11/19 17:54 (изменено)

Я вне формы передаю стандартные значения, указал true, записалось как 1. Мне нужно именно true, как иправить

 

в '' вроде работает.

Изменено пользователем siv1987

Поделиться сообщением


Ссылка на сообщение

@TemKa_SD, на какой хрен вы две строчки кода грузите скриншотами? Всю текстовую информацию пишите в теме обрамляя в ббкоды. Не нужно засорять форум этими скриншотами.

Поделиться сообщением


Ссылка на сообщение

Мне казалось скринами понятней, и можно заскринить не только ту часть когда о которой идет речь, но и остальное.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...