fputcsv的2d数组不工作


2d array to fputcsv not working

我的数组如下所示;

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

标题很好,但我不知道如何在数据上获得三列。此时,数组进入csv的一列。

我以为array_chuck()可能会有所帮助,但我没能解决。

这应该适用于您:

在这里,我只是将结构从:更改为

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

清理数据。。。我现在看到了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]=> ...
$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,并且在本例中运行良好。