将Key => Value添加到PHP数组?

Tim*_*m M -1 php arrays

我正在尝试将"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)

任何帮助将非常感激.

蒂姆

Art*_*nix 5

构建数组时

$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年的阅读和写作经验.这就是我所知道的.

干杯!