Дополнительное пустое значение при разборе файла в массив

РЕДАКТИРОВАТЬ: проверка на! empty работает — но я все еще хотел бы знать, почему какое-то время продолжается после окончания файла. Спасибо!

Я пытаюсь проанализировать файл, который выглядит так:

export NTPSERVER_1 NTPSERVER_2 NTPSERVER_3 PSLOGHOST LOGHOST RSSHHOST RHPORT
NTPSERVER_1=8.8.8.8
NTPSERVER_2=
NTPSERVER_3=
LOGHOST="8.8.8.8"PSLOGHOST=""RSSHHOST="8.8.8.8"RHPORT=88888

Работает отлично, Кроме в массиве есть дополнительное последнее значение без ключа и с нулевым значением. Я попытался добавить проверку на $ line, равную нулю, но безрезультатно. И я дважды проверил, что в файле нет пустых строк после строки RHPORT.
Я получаю сообщение «Notice: Undefined offset: 1», и последнее в массиве — [«»] => NULL
Я не понимаю, почему какое-то время не останавливается в конце файла.

$file = fopen("files/network.conf","r");
$i = 0;

while(! feof($file)) {

$line = fgets($file);

if ($i > 0 && !is_null($line)) { // skipping first line of file

$array = explode('=',$line);
$fileValues[$array[0]] = $array[1];

}
$i++;
}
fclose($file);

2

Решение

Я рекомендую вам использовать файл() функция

$array = file('file path', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$final_array = [];//empty array declaration
foreach($array as $arr){ // iterate over array get from file() function
$exploded_array = explode('=',$arr);
$final_array[$exploded_array[0]] = $exploded_array[1];
}
print_r($final_array);

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

2

Другие решения

Вы можете использовать file_get_contents и regex, чтобы получить значения.

// Uncomment line below
//$str =file_get_contents("files/network.conf");
$str = 'export NTPSERVER_1 NTPSERVER_2 NTPSERVER_3 PSLOGHOST LOGHOST RSSHHOST RHPORT
NTPSERVER_1=8.8.8.8
NTPSERVER_2=
NTPSERVER_3=
LOGHOST="8.8.8.8"PSLOGHOST=""RSSHHOST="8.8.8.8"RHPORT=88888';

// Find lines with = and save them to $matches[1] and [2]
Preg_match_all("/(\w+)\=(.*)/", $str, $matches);

// Create array as you expect
Foreach($matches[1] as $key => $val){
$res[$val] = str_replace('"','',$matches[2][$key]); // remove " if it exists.
}

Var_dump($res);

https://3v4l.org/CO59t

0

По вопросам рекламы [email protected]