Мой текущий код:
$file = fopen("countries.txt","r"); $array = array(); while(!feof($file)) { $array[] = fgets($file); } fclose($file);
Вот мой цикл foreach:
$str = "test"; foreach ($array as $key => $val) { if ($val == $str) { echo $val; } else { echo "not found"; } }
Мне интересно, почему это только печать $ val, если это последнее значение массива.
Например, он работает, если txt-файл выглядит так:
test1 test2 test3 test
но не работает, если это выглядит так
test1 test2 test test3
Проблема в том, что в конце каждой строки у вас есть новый символ линии, поэтому:
test\n !== test //^^ See here
Вот почему он не работает, как вы ожидаете.
Как это решить сейчас? Могу ли я представить вам функцию: file()
. Вы можете прочитать файл в массиве и установить флаг, чтобы игнорировать эти новые строки в конце каждой строки.
Поэтому, объединяя всю эту информацию, вы получите этот код:
$array = file("countries.txt", FILE_IGNORE_NEW_LINES); $str = "test"; foreach ($array as $key => $val) { if ($val == $str) { echo $val; } else { echo "not found"; } }
Когда вы сравниваете строки – вы всегда должны использовать '==='.