Найти, существует ли значение в CSV-файле с PHP

Это мой код, чтобы проверить, содержит ли строка моего CSV-файла определенное имя, но оно не работает.

Я думаю, что это имеет какое-то отношение к утверждению if .

 $file_handle = fopen("sources.csv", "r"); while (!feof($file_handle) ) { $line_of_text = fgetcsv($file_handle, 1024); if ($line_of_text[0] = 'paul') { echo 'Found'; } } fclose($file_handle); 

Я пытаюсь проверить файлы sources.csv для имени «Пол».

Я не могу использовать базу данных, такую ​​как MySQL, по техническим причинам.

Поскольку вы не представили образец своего файла, я представляю следующее в качестве альтернативы.

Обратите внимание, что в вашем нынешнем коде вы назначаете один знак равенства = вместо сравнения с использованием == или === , просто говоря как FYI .

if ($line_of_text[0] = 'paul') следует читать как if ($line_of_text[0] == 'paul')

Предполагая, что следующий формат .csv (будет работать даже без запятых) и учитывает регистр, проконсультируйтесь со сносками относительно нечувствительности к регистру.

 Paul, Larry, Robert 

Код:

 <?php $search = "Paul"; $lines = file('sources.csv'); $line_number = false; while (list($key, $line) = each($lines) and !$line_number) { $line_number = (strpos($line, $search) !== FALSE); } if($line_number){ echo "Results found for " .$search; } else{ echo "No results found for $search"; } 

Примечания:

Для поиска без stripos() регистра используйте stripos()

 $line_number = (stripos($line, $search) !== FALSE); 

Номер строки найден …

Чтобы указать номер строки, в которой он был найден:

 $line_number = (strpos($line, $search) !== FALSE) ? $count : $line_number; 

или (без учета регистра)

 $line_number = (stripos($line, $search) !== FALSE) ? $count : $line_number; 

затем просто echo $line_number;

Попробуйте использовать in_array вместо ==

 if(in_array('paul', $line_of_text)) { // FOUND } 

Ваша проблема в этой строке:

 if ($line_of_text[0] = 'paul') { 

Это всегда будет верно, потому что вы присваиваете значение paul $line_of_text[0] с помощью оператора присваивания = . То, что вы хотите сделать, это проверить, равны ли эти два, поэтому вам нужно использовать оператор равенства == . Строка кода должна быть:

 if ($line_of_text[0] == 'paul') { 

Существует также оператор === равенства в PHP, который проверяет одно и то же значение и тот же тип. (Это особенно неприятная особенность PHP по сравнению с компилируемыми языками)

например, рассмотрим: `$ foo = 5; $ bar = "5";

 if ($foo === $bar) // this will be false because foo is an int, and bar is a string if ($foo == $bar) // this will be true 

Не путайте с оператором сравнения: !=

 if ($foo != $bar) // foo is not equal to bar (note the single =)