Чтение текстового файла и сравнение строки с той же строкой возвращает false

Мой текущий код:

$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 

Related of "Чтение текстового файла и сравнение строки с той же строкой возвращает false"

Проблема в том, что в конце каждой строки у вас есть новый символ линии, поэтому:

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

Когда вы сравниваете строки – вы всегда должны использовать '==='.