Найти, существует ли значение в файле 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, по техническим причинам.
3 ответа
Поскольку вы не предоставили образец своего файла, в качестве альтернативы отправляю следующее.
Обратите внимание, что в вашем нынешнем коде вы присваиваете один знак равенства =
вместо сравнения с использованием ==
или же ===
Скажу как к вашему сведению.
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()
$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;
Ваша проблема в этой строке:
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 =)
Попробуйте использовать in_array вместо ==
if(in_array('paul', $line_of_text)) {
// FOUND
}