簡體   English   中英

將鍵=>值添加到PHP數組?

[英]Add Key => Value to PHP Array?

我試圖將鍵“ username”的值添加為“ johnsmith”到每個數組,但是無法使其正常工作。

這是生成數組的代碼:

foreach($rows as $row)
    {
    $csv[] = array_combine($header, $row);
    }

這是數組輸出:

[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
    )

我嘗試了以下代碼,但是它只是覆蓋了數組:

   $csv += [ "username" => johnsmith ];

任何幫助將非常感激。

提姆

當您建立陣列時

$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);
}

請注意, 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"
];

這些結合起來很好,但是如果您添加

$row = [
    "4/23/2018",
    "3,284",
    "9,671",
    "4.69",
    "9",
    "805",
    "180",
    "101",
    "68",
    "1,903",
    "username" => "johnsmith"
];

$headers結合使用時會出錯,因為$row$headers長1。 但是,如果將標題添加到末尾,則將數據添加到該行的末尾。 一切都很好,因為它們的長度相同。

數組合並是一個很棒的功能,但是使用它可能有點討厭。

請注意:

其他解決方案可能會添加數據,但是請考慮如果要為此創建CSV文件,會發生什么。 因為他們還沒有修改標題行。 當你做

   fputcsv($f, $header);

您的標題將會很短。

如果您只是讀取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);
  }

這樣做是跳過制作一個單獨的數組和一個“真實”文件。

它有幾個優點和缺點

好處

  • 沒有多余的數組
  • 沒有多余的文件要刪除
  • 下載較大的文件,因為它將數據傳輸到瀏覽器
  • 較短的代碼

壞處

  • 沒有下載進度條,因為您不知道要制作的文件大小

如果您不這樣做,則可以在其他地方使用它。

我要做的主要工作之一就是創建CSV文件,我每天都會與他們合作。 所以我有大約5年的閱讀和寫作經驗。 這就是我所知道的。

干杯!

您必須將其分別插入每一行:

foreach($rows as $row) {

    $csv[] = array_merge(
        array_combine($header, $row),
        array('username' => $johnsmith, 'anything' => 'else')
    );
}

我一直喜歡一個盡可能少地修改現有代碼的解決方案,所以這是我的:

foreach ($rows as $row) {
    $csv[] = array_combine($header, $row) + ["username" => "johnsmith"];
}

說明:只需將任何其他值作為數組添加到array_combine()的結果中array_combine()

這是一個例子:

   foreach($rows as $row) {
     $newArray=array_combine($header, $row);
     $newArray["username"]="johnsmith";
     $csv[] = $newArray;
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM