【问题标题】:Find if a value exist in a CSV file with PHP使用 PHP 查找 CSV 文件中是否存在值
【发布时间】:2014-08-20 14:11:59
【问题描述】:

这是我检查 .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);

我正在尝试签入名为 'Paul' 的 sources.csv 文件。

由于技术原因,我不能使用像 MySQL 这样的数据库。

【问题讨论】:

  • 如果有错误?另外,您正在分配一个等号。做if ($line_of_text[0] == 'paul')
  • 顺便说一句 ====== 不同
  • 向我们展示您的.csv 文件的样本(包括是否以逗号分隔等)。寻找“保罗”的范围可能相当广泛。
  • 我认为这是一个英语相对较差的问题的一个很好的例子(它并不可怕,但也不是很好),但它是一个完全可以理解的问题。赞一个!
  • 编辑您的问题并添加几行sources.csv 作为您正在处理的数据的示例。但首先将if ($line_of_text[0] = 'paul') { 更改为if ($line_of_text[0] == 'paul') {

标签: php csv fopen fgetcsv


【解决方案1】:

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

请注意,在您当前的代码中,您使用单个等号 = 进行分配,而不是使用 ===== 进行比较,只是作为仅供参考

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;

【讨论】:

  • 非常感谢 Fred -ii- 的回答。效果很好。
【解决方案2】:

你的问题是这一行:

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

【讨论】:

    【解决方案3】:

    尝试使用 in_array 而不是 ==

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

    【讨论】:

    • 这是错误的,因为它将检查当前 CSV 行中的所有字段,而不是所需的第一个字段。
    • 他没有在问题中指定只检查第一个字段。他的问题是:“这是我检查我的 .csv 文件的一行是否包含特定名称的代码” 他只检查第一个字段的事实可能是问题所在。
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 2018-08-04
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2012-02-12
    相关资源
    最近更新 更多