Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
TemKa_SD

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

Recommended Posts

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

 

	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

Edited by TemKa_SD

Share this post


Link to post

Мне нужно комнаты поместить в массив 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;
	}
}

Share this post


Link to post

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

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

 

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

 

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

Share this post


Link to post

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

 

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

Edited by TemKa_SD

Share this post


Link to post

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

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

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

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

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

  • Upvote 1

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

А смысл?

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

Share this post


Link to post

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

Share this post


Link to post

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

 

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

Edited by siv1987

Share this post


Link to post

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

Share this post


Link to post

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

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...