【问题标题】:fputcsv - only one columnfputcsv - 只有一列
【发布时间】:2012-07-17 11:09:45
【问题描述】:

我想将我的 mysql 数据库的部分(并且排列方式不同)保存在 CSV 文件中。为此,我编写了这段代码:

$headerDisplayed = false;
foreach ($arr as &$currName)
{
    $result2 = mysql_query("SELECT * FROM Experiment Where Person='$currName'"); 
    $i = 1;
    while ($row2 = mysql_fetch_array($result2)) 
    {
        $list['Name'] = $currName;
        $list['Studie'] = $row2['Studie']; 
        if(strcmp($row2['Antwort'],$row2['Korrekt']) == 0)
        {
            $list["A $i"] = '0';
        }
        else
        {
            $list["A $i"] = '1';
        }

        $i++;
    }

    if ( !$headerDisplayed ) {
        // Use the keys from $data as the titles
        fputcsv($fp, array_keys($list));
        $headerDisplayed = true;
    }

    fputcsv($fp, $list);
}

fclose($fp);

不幸的是,这不是我想要的。我的计划是$list(例如$list["A 1"]$list["A 15"])的每个条目都有自己的列。然后fputcsv 的调用应该为每个$list 条目创建一个新行和一列。 正如预期的那样,我每次调用fputcsv 都会创建新行,但完整的$list 数组位于第一列(最左侧)。

我必须做些什么来解决这个问题?

添加: 我得到类似的东西:

[1,0,0,0,1,1,0,0] [] [] [] [] [] [] []

[1,0,1,1,0,1,0,0] [] [] [] [] [] [] []

[0,1,1,1,1,1,0,1] [] [] [] [] [] [] []

但我想要的更像是:

[1] [0] [0] [0] [1] [1] [0] [0]

[1] [0] [1] [1] [0] [1] [0] [0]

[0] [1] [1] [1] [1] [1] [0] [1]

【问题讨论】:

  • 那么,你从哪里得到这个“结果”以这种方式显示? Excel?
  • 好的,那么这是你的问题。使用 fputcsv() 的第 3 和第 4 个参数使您的 CSV 格式适合 excel。 (不知道excel马上接受什么)
  • 帮助很大,谢谢。我所要做的就是更改为“fputcsv($fp, $list, ';',' ');” ...是否可以为此评论给您+1?或者我将哪一个标记为答案?
  • 我在下面对我的答案进行了更改...

标签: php mysql arrays csv fputcsv


【解决方案1】:

这个这个:

fputcsv($fp, array_values($list));

编辑:

使用它可以立即使用 excel:

fputcsv($fp, array_values($list), ';', ' ');

编辑 2: 在 excel 中用作字段分隔符的默认字符由 windows 的区域设置设置。这意味着:如果您导出具有德语语言环境设置的 csv 文件,将导致在美国环境中的 excel 出现问题......另一个 thread 涵盖了这个主题。

【讨论】:

  • 我可以运行它,它会返回一个 CSV 文件,其中包含“这是一个测试”、“”“这个”“是一个测试”、“这是一个'测试'”、“这是a”在第一行第一列,然后在下一行“测试”。这重复了很多次。
  • 酷!将分隔符更改为“;”工作完美!非常感谢!我仍然很好奇为什么使用“,”作为分隔符不起作用???
  • 为什么有一个 ' ' 空间来放置外壳?
【解决方案2】:

试试这个

fputs($fp, implode(array_keys($list), ',')."\n");

fputs($fp, implode(array_values($list), ',')."\n");

【讨论】:

  • 坏主意!什么,如果输入类似于:“姓,名”?
  • 事实并非如此,即使 $list['Name'] 实际上也不是名称,而是指代名称的编码整数。但这仍然没有改变任何东西。我在我的问题中添加了一些内容。
  • 您的代码只处理标题列。如果将此应用于 csv 内容,则字段中可能会出现逗号...
  • @Justin 为什么要将 array_map 和 fputcsv 一起使用,只是在字段周围包裹“”?只需使用 fputcsv($f, $array, ';', '"');
  • 我还是测试了它。它把一切都搞砸了^^但是非常感谢你的尝试和你的努力:)
【解决方案3】:

你必须做一个矩阵:

        {
            $list["A"]["$i"] = '0';
        }
        else
        {
            $list["A"]["$i"] = '1';
        }

参见http://php.net/manual/en/function.fputcsv.php的示例1

【讨论】:

  • 这只会导致csv文件每一行中的[Array] :(
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2017-05-05
  • 1970-01-01
相关资源
最近更新 更多