二维数组到 fputcsv 不工作
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);
headers 没问题,但我不知道如何获取数据的三列。目前 array 在一列中进入 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()
. After this I just go through the header array and take each array_column()
将数组拆分为 3 个块并将其放入 $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
已被使用,并且在此示例中运行良好。
我的数组看起来像这样;
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);
headers 没问题,但我不知道如何获取数据的三列。目前 array 在一列中进入 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()
. After this I just go through the header array and take each array_column()
将数组拆分为 3 个块并将其放入 $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
已被使用,并且在此示例中运行良好。