【问题标题】:2d array to fputcsv not working二维数组到 fputcsv 不起作用
【发布时间】:2015-04-03 19:34:52
【问题描述】:

我的数组是这样的;

Array
(
 [0] => January
 [1] => 2015-01-30
 [2] => 2015-01-15
 [3] => February
 [4] => 2015-02-27
 [5] => 2015-02-18
 [6] => March
 [7] => 2015-03-31
 [8] => 2015-03-18
)

如何将其输出到 csv 中的三列?一个用于月份名称,另外两个用于随后的两个日期。

目前我的代码如下所示;

$header = array("Month","Date One","Date Two");

$fp = fopen($filename, "w");
fputcsv ($fp, $header, "\t");
foreach($payments_array as $row){
     fputcsv($fp, array($row), "\t");
}
fclose($fp);

标题正常,但我不知道如何获取数据的三列。目前 at array 在一列中全部进入 csv。

我认为array_chuck() 可能会有所帮助 - 但我无法解决。

【问题讨论】:

  • 你可以将你的 array() 变成一个多维数组吗?像 array("January" => array("2015-01-30", "2015-01-15"))

标签: php arrays multidimensional-array fputcsv


【解决方案1】:

这应该适合你:

这里我只是改变结构:

Array
(
    [0] => January
    [1] => 2015-01-30
    [2] => 2015-01-15
    [3] => February
    [4] => 2015-02-27
    [5] => 2015-02-18
    [6] => March
    [7] => 2015-03-31
    [8] => 2015-03-18
)

到:

Array
(
    [0] => Array
        (
            [0] => January
            [1] => February
            [2] => March
        )

    [1] => Array
        (
            [0] => 2015-01-30
            [1] => 2015-02-27
            [2] => 2015-03-31
        )

    [2] => Array
        (
            [0] => 2015-01-15
            [1] => 2015-02-18
            [2] => 2015-03-18
        )

)

我通过使用array_chunk() 将数组分成 3 个块来实现这一点。在此之后,我只需遍历标头数组并将每个array_column() 放入$data 数组中。在此之后,您可以像以前一样简单地遍历数组并将每一行写入.csv 文件中。

<?php

    $arr = array_chunk($arr, 3);

    foreach($arr[0] as $k => $v)
        $data[] = array_column($arr, $k);


    $fp = fopen($filename, "w");
    foreach($data as $row){
         fputcsv($fp, $row, "\t");
    }
    fclose($fp);

?>

输出:

January February    March
2015-01-30  2015-02-27  2015-03-31
2015-01-15  2015-02-18  2015-03-18

编辑:

我想我错过了什么;所以这应该是你想要的:

<?php

    $data = array_chunk($arr, 3);
    $header = array("Month","Date One","Date Two");

    $fp = fopen($filename, "w");
    fputcsv($fp, $header, "\t");
    foreach($data as $row){
        fputcsv($fp, $row, "\t");
    }
    fclose($fp);

?>

输出:

Month   "Date One"  "Date Two"
January 2015-01-30  2015-01-15
February    2015-02-27  2015-02-18
March   2015-03-31  2015-03-18

【讨论】:

  • 比我管理的更接近!谢谢。但是您的解决方案创建了 12 列和 3 行。我想要 12 行 3 列。
  • @mike3875 什么,怎么样?你的数组只有 9 个元素!所以它只是创建了 3 行,每行 3 列。你真正使用什么数组,你期望什么输出?
  • @mike3875 我想我现在明白你的意思了,更新我的答案
  • @mike3875 那么我的编辑是解决方案还是其他答案?或者我们在哪里?如果没有任何帮助,请确保向我们展示您的 真实 数组和预期输出
  • 是的,很抱歉。我的意思是 9。您更新后的答案是正确的!
【解决方案2】:

清理数据...我现在看到了 Rizier123 的答案...可能更干净了。无论如何,每个人都在说的关键,按照你想要的方式获取数组,然后担心 fputcsv。

$payments_array = [
 'January',
 '2015-01-30',
 '2015-01-15',
 'February',
 '2015-02-27',
 '2015-02-18',
 'March',
 '2015-03-31',
 '2015-03-18'];

$better_payments_array = [];
for ($i=0; $i<count($payments_array); $i++) {   
    $better_payments_array[] = [$payments_array[$i], $payments_array[$i+1],     $payments_array[$i+2]]; 
    $i=$i+2;
}

var_dump($better_payments_array);

array(3) {
  [0]=>
  array(3) {
    [0]=>
    string(7) "January"
    [1]=>
    string(10) "2015-01-30"
    [2]=>
    string(10) "2015-01-15"
  }
  [1]=> ...

【讨论】:

    【解决方案3】:
    $array=array( 'January','2015-01-30','2015-01-15','February','2015-02-27','2015-02-18','March','2015-03-31','2015-03-18');
    
    $header = array("Month","Date One","Date Two");
    $chunks=array_chunk($array,3);
    $fp = fopen('test.csv', "w");
    fputcsv ($fp, $header, "\t");
    for($i=0;$i<count($chunks);$i++) {
    
    
        fputcsv($fp, $chunks[$i], ',');
    
    
    }
    fclose($fp);
    

    array_chunk,正如您所提到的,在此示例中已被使用,并且工作正常。

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 2021-01-30
      • 2021-11-18
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多