使用PHP查找CSV文件中是否存在值

时间:2014-08-20 14:11:59

标签: php csv fopen fgetcsv

这是我的代码,用于检查我的.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文件中的名称' Paul'

出于技术原因,我无法使用像MySQL这样的数据库。

3 个答案:

答案 0 :(得分:1)

由于您尚未提供文件样本,因此我提交以下内容作为替代方案。

请注意,在您目前的代码中,您使用单个等号=进行分配,而不是使用=====进行比较,仅表示为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()

$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;

答案 1 :(得分:0)

尝试使用in_array而不是==

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

答案 2 :(得分:0)

你的问题就在这一行:

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

这将始终为真,因为您使用assign运算符paul将值$line_of_text[0]分配给=。你想要做的是检查两者是否相等,所以你需要使用相等运算符==。代码行应该是:

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

PHP中还有===等于运算符,它检查相同的值和相同的类型。 (与编译语言相比,这是PHP的一个特别令人讨厌的特性)

e.g。考虑:`$ foo = 5; $ bar =&#34; 5&#34 ;;

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 =)