2015-04-03 76 views
1

我的數組看起來像這樣;二維數組fputcsv不工作

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()可能會有所幫助 - 但我無法解決這個問題。

+0

是否有可能讓你的array()爲多維數組?像數組(「1月」=>數組(「2015-01-30」,「2015-01-15」)) – D3F 2015-04-03 19:37:25

回答

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 
     ) 

) 

我這樣做與陣列分成以3塊array_chunk()。在此之後,我只需通過標題數組並將每個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 
+0

比我管理的更接近!謝謝。但是你的解決方案創建了12列和3行。我想要12行上的3列。 – mikelovelyuk 2015-04-03 19:53:08

+0

@ mike3875什麼,怎麼樣?你的數組只有9個元素!所以它只創建3行,每行3列。你真的使用了什麼陣列?你會期望什麼輸出? – Rizier123 2015-04-03 19:54:27

+0

@ mike3875我想我現在看到你的意思了,更新我的答案 – Rizier123 2015-04-03 20:03:15

0

清理數據...我現在看到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]=> ... 
0
$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,正如你所提到的,被使用,並且在這個例子中正常工作。