我有一个php页面,它正在创建一个要下载的csv文件,该文件由数组组成。 Array的简短版本:
$data = array("Joe Bloggs", "jbloggs", "John Doe", "jdoe")
我的数组是由其他命令的输出制成的,所以我不能只更改数组的布局,如果可以帮助实现我的目标,我可以创建两个数组,一个用于名称,一个用于用户名。
这是我将数组值添加到csv文件中的操作:
$output = fopen('php://output', 'wb');
fputcsv($output, array('Name', 'Username'));
foreach ($data as $line ) {
$val = explode(",", $line);
for ($i=0; $i<$val["count"]; $i++); {
fputcsv($output , array($val[$i]));
}
}
fclose($output);
这给了我一个看起来像这样的csv:
Name | Username
Joe Bloggs|
jbloggs |
John Does |
jdoe |
真的,我需要在同一行但在“用户名”列中输入用户名。 我已经尝试过这个方法并且对此进行了很多修改,但是它似乎不起作用,我的想法是我每次将N增加2,所以$ i将是名称,因为它是所有其他索引位置,然后在执行fputcsv时在$ i中加1,这样它将捕获用户名,因为它是名称后的值。
foreach ($data as $line ) {
$val = explode(",", $line);
for ($i=0; $i<$val["count"]; $i+=2); {
fputcsv($output , array($val[$i], $val[$i+1]));
}
}
fclose($output);
使用以上内容,我仍然可以看到第一列中的所有值。
很抱歉写我的代码样式问题,但是我对此不甚了解,无法找到如何在数组的for循环中获得两个连续的值。
答案 0 :(得分:1)
这里有1种方法。
$output = fopen('php://output', 'wb');
fputcsv($output, array('Name', 'Username'));
$temp = []; //Define a temp array.
foreach ($data as $line ) {
$temp[]= $line;
if( count( $temp) == 2 ) { //If no. of values in temp array is 2, write to csv file
fputcsv($output , $temp );
$temp = []; //initialize $temp;
}
}
fclose($output);
答案 1 :(得分:1)
尽管可以回答,但以下原因导致“数组不均匀”:
<?php
$output = fopen('php://output', 'wb');
fputcsv($output, ['Name', 'Username']);
$data = ['Joe Bloggs', 'jbloggs', 'John Doe', 'jdoe', 'Straggler'];
foreach (array_chunk($data, 2) as $lineItems) {
fputcsv($output, $lineItems);
}
fclose($output);