Найти, существует ли значение в файле 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
}
Другие вопросы по тегам