Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

 

	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];
}

Опубликовано:
  • Автор

Да, спасибо, это то что нужно. Я пробовал через 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]];

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

Опубликовано:

А смысл?

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

Опубликовано:
  • Автор

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

Опубликовано:
  • Автор

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

 

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

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

Опубликовано:

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

Опубликовано:
  • Автор

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

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.