【问题标题】:fgetcsv and "0" valuefgetcsv 和“0”值
【发布时间】:2010-01-20 17:19:13
【问题描述】:

所以我使用 PHP 函数 fgetcsv 来解析 .csv 文件(逗号分隔,字段由“”括起来)并将其导入 MySQL。问题是,某个字段总是空的,即使它有时应该包含“0”。所以我猜测该函数将“”和“0”视为空值,但这对我来说很成问题。有什么想法吗?

编辑 - 代码:

$handle = fopen("/home/simon/projet-web/Quebec.csv", "r");

if ($handle)
{      
  while($line = fgetcsv($handle, 0, ",", "\""))
  {
    if ($line[55] === "0") 
      echo $line[55] . " / " . $line[4] . "<br />";
  [...]

【问题讨论】:

  • 我们需要更多的工作 - 你能包括完整的 fgetcsv 块吗?
  • 好吧,没关系,我发现了我的错误。我意识到,在我尝试了这里建议的所有内容之后,我没有测试正确的变量。是的,尽管听起来很迟钝,但这就是错误 T_T。

标签: php csv


【解决方案1】:

【讨论】:

  • 已经尝试过 - 我刚刚添加了代码。不会改变任何东西,没有任何东西可以通过这个条件(比如如果函数认为这个值是 null 并且它给“line [55]”的值)。
  • 值数组(来自单行)将始终包含字符串。所以你没有 0 作为整数,而是作为一个字符串。您应该检查是否: ... === '' 返回 true - 然后您有一个空列。 ... === '0' 如果列包含零,则返回 true
  • 是的,没错,我添加了必要的“”。但问题是,即使文件中有一些“0”值,fgetcsv 也会忽略它们并认为它们为空,因此永远不会满足条件。
【解决方案2】:

您应该能够使用以下方法来区分零条目和空字段...

if($currentRow[$currentIndex] === 0)

...检查是否存在零。 (同样的逻辑适用于使用返回零或 false 的函数,例如 strpos - 在这种情况下,您需要检查 !== false 等)

正如 Crozin 所说,这是相同的比较运算符,用于检查类型和值等价。

【讨论】:

  • 是的,就像我对 Crozin 的评论一样,这看起来没有帮助(尽管它应该)。 fgetcsv 肯定有一些让我无法理解的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多