【问题标题】:PHP: csv generator creates extra fieldPHP:csv 生成器创建额外的字段
【发布时间】:2010-04-18 14:21:24
【问题描述】:

我正在编写一个脚本,该脚本将一个 csv 文件转换为另一个文件。基本上,使用了两个 foreach 循环:一个用于迭代记录,另一个用于迭代字段。需要修改每条记录的某些字段(cno 25、26、44)。问题是每个修改都会创建一个额外的空字段,即代码

$colStr .= '"' . $col . '";';

有效但不适用于 if 语句中的任何代码。

代码是:

$rno = 0;
foreach ($csvArray as $line)
{
 $cno = 0;
 $colStr = "";

 foreach ($line as $col)
 {

  if($rno>0 && $cno==25)
  {
   $stuff = array($csvArray[$rno][41], $csvArray[$rno][47], $csvArray[$rno][48], $csvArray[$rno][49]);


   foreach($stuff as &$value)
   {
    $value = preg_replace('/[^0-9]/', '', $value);
   }
   sort($stuff, SORT_NUMERIC);

   // Causes bug!
   $colStr .= '"' . $stuff[0] . '";';
  }

  if($rno>0 && $cno==26)
  {
   $urls = "";

   for($i = 55; $i<=62; $i++)
   {
    $urls .= "Images: " . $csvArray[$rno][$i] . " | ";
   }
   $urls .= "Some text: " . $csvArray[$rno][43] . " | ";

   // Causes bug!
   $colStr .= '"' . $urls . '";';
  }

  if($rno>0 && $cno==44)
  {
   $colStr .= '"' . $_POST['location'][$rno] . '";';
  }

  if($rno>0 && $cno==54)
  {
   $objType = $col;

   $objType = preg_replace('/foobar/i', '123', $objType);

   // Causes bug!
   $colStr .= '"' . $objType . '";';
  }

  else
  {
   // This is ok, though
   $colStr .= '"' . $col . '";';
  }

  $cno++;
 }

 $colStr = preg_replace('/;$/', '', $colStr);
 $colStr .= "\n";
 fwrite($outputFile, $colStr);
 $rno++;

}

fclose($outputFile);

【问题讨论】:

  • 从输入和输出中给出几行示例。您是否在某处添加了额外的分隔符?

标签: php file csv


【解决方案1】:

哇,刚刚意识到 if/else 逻辑搞砸了 :( 该死。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2019-03-18
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多