Это мой код, чтобы проверить, содержит ли строка моего 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 =)