我正在尝试将"johnsmith"值的"用户名"添加到每个数组,但无法使其正常工作.
这是生成数组的代码:
foreach($rows as $row)
{
$csv[] = array_combine($header, $row);
}
Run Code Online (Sandbox Code Playgroud)
这是数组输出:
[0] => Array (
[Date] => 4/22/2018
[Calories Burned] => 3,178
[Steps] => 9,966
[Distance] => 4.86
[Floors] => 8
[Minutes Sedentary] => 762
[Minutes Lightly Active] => 204
[Minutes Fairly Active] => 79
[Minutes Very Active] => 51
[Activity Calories] => 1,778
)
[1] => Array (
[Date] => 4/23/2018
[Calories Burned] => 3,284
[Steps] => 9,671
[Distance] => 4.69
[Floors] => 9
[Minutes Sedentary] => 805
[Minutes Lightly Active] => 180
[Minutes Fairly Active] => 101
[Minutes Very Active] => 68
[Activity Calories] => 1,903
)
[2] => Array (
[Date] => 4/24/2018
[Calories Burned] => 3,714
[Steps] => 12,312
[Distance] => 5.92
[Floors] => 6
[Minutes Sedentary] => 676
[Minutes Lightly Active] => 239
[Minutes Fairly Active] => 131
[Minutes Very Active] => 84
[Activity Calories] => 2,462
)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下代码,但它只是覆盖了数组:
$csv += [ "username" => johnsmith ];
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
蒂姆
构建数组时
$headers[] = 'username'; //add the key to the end of your headers
foreach($rows as $row){
$row[] = 'johnsmith'; //add value to the end of the row.
//now combine them.
$csv[] = array_combine($header, $row);
}
Run Code Online (Sandbox Code Playgroud)
需要注意的是array_combine,这两个阵列的长度必须相同.因此,$row如果标题没有用户名,那么通过更改即可添加可能不在标题中的内容,您必须添加它.
您可能还希望$header与$csv子阵列保持同步.它使后来生活更轻松.
当你把它们结合起来(解释)
$headers = [
"Date",
"Calories Burned",
"Steps",
"Distance",
"Floors",
"Minutes Sedentary",
"Minutes Lightly Active",
"Minutes Fairly Active",
"Minutes Very Active",
"Activity Calories"
];
$row = [
"4/23/2018",
"3,284",
"9,671",
"4.69",
"9",
"805",
"180",
"101",
"68",
"1,903"
];
Run Code Online (Sandbox Code Playgroud)
这些组合很好,但如果你添加
$row = [
"4/23/2018",
"3,284",
"9,671",
"4.69",
"9",
"805",
"180",
"101",
"68",
"1,903",
"username" => "johnsmith"
];
Run Code Online (Sandbox Code Playgroud)
将此组合时会出现错误,$headers因为$row它比1长1 $headers.但是,如果在末尾添加标题,则将数据添加到行的末尾.一切都很好,因为它们的长度相同.
数组合是一个很棒的功能,但它可能有点讨厌.
提醒一句:
其他解决方案可能会添加数据,但请考虑如果您要创建此文件的CSV文件会发生什么.因为他们没有修改标题行.当你这样做
fputcsv($f, $header);
Run Code Online (Sandbox Code Playgroud)
你的标题将是一个简短的.
如果您只是在阅读CSV文件,那么您可以选择不更改标题.但请记住,如果您将它们(标题)用于其他任何内容,它们将与您的数据不同步.
例如:即使在读取时您可以使用表头中的列标题行来显示数据,您也会发现自己只有一个标题.
完全基于您如何命名您的变量,看起来您可能正在从数据库中提取数据并从中创建CSV文件?我在这方面可能是错的,但如果是这种情况,你可以缩短一点.
作为奖金
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');
$f = fopen('php://output'); //PHP stream wrapper
$headers[] = 'username';
fputcsv($f, $headers);
foreach($rows as $row){
$row[] = 'johnsmith'; //add value to the end of the row.
fputcsv($f, $row);
}
Run Code Online (Sandbox Code Playgroud)
这样做,就是跳过制作一个单独的数组和一个"真正的"文件.
它有几个优点和一个缺点
好处
坏处
如果你不这样做,你可以在其他地方使用它.
我在工作中做的主要事情之一是创建CSV文件,我每天都在使用它们.所以我有大约5年的阅读和写作经验.这就是我所知道的.
干杯!