iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
自我挑戰組

PHP 沿途的風景系列 第 2

[Day02] 合併陣列 (+) 補充

  • 分享至 

  • xImage
  •  

合併陣列 (+) 補充

合併陣列 (+) 補充,在 What is the difference between array_merge and array + array in PHP? 一文中,一個範例如下:

  • 一個翻車現場的寫照!'four' => 4, ,怎麼會這樣?! 'four' => 4, 12, 13, 14, 15 的 12, 13, 14, 15 到哪去!
  • 除了 Array 的 key 相同情況下會被覆蓋; Also in case of numeric array the index of the right hand array which is same with left hand array will be ignored in resultant array.^1^
    • 也就是說, 若 array index 相同,output value 採用 array index 相對應的左側陣列中的 value ,忽略右側陣列中 index 的 value
    • $arr1 的 'two' => 2, 10, 11, 12, 13 之中,左側陣列的 $arr1 index 分別為:
      • [0] => 10, [1] => 11, [2] => 12, [3] => 13
      • 此時,透過 $arr1 + $arr2 合併的 $arr4 'four' 只會顯示 4
      • 原因: $arr1 'two' 的 index 0 ~ 3 顯示 value 取代 $arr2 'four' 的 index 0 ~ 3
      • $arr2 'four' 的 index 分別為: [0] => 12, [1] => 13, [2] => 14, [3] => 15
      • 為什麼 'four' => 4, 12, 13, 14, 15 的 print_r($arr1['four']) output 是 4,array index 0 ~ 3 的 value 是 12, 13, 14, 15,請閱讀 PHP 文件-Arrays規範
<?php
// 範例
$arr1 = array( 'zero' =>  0,
               'one'  =>  1,
               'two'  =>  2, 10, 11, 12, 13
        );
         
$arr2 = array( 'one'   => 11,
               'three' => 3,
               'four'  => 4, 12, 13, 14, 15
        );

$arr4 = $arr1 + $arr2;

print_r($arr4); 

/* 我以為的      $arr4: (
 *   'zero'  => 0,
 *   'one'   => 1,
 *   'two'   => 2, 10, 11, 12, 13
 *   'three' => 3,
 *   'four'  => 4, 12, 13, 14, 15
 * )
 */

/* 實際拿到的      $arr4: (
 *   'zero'  => 0,
 *   'one'   => 1,
 *   'two'   => 2, 
 *   [0]     => 10,
 *   [1]     => 11,
 *   [2]     => 12,
 *   [3]     => 13
 *   'three' => 3,
 *   'four'  => 4, 
 * )
 */
  • 如果,真的很想印出 $arr4 'four' 的 value 12, 13, 14, 15 ,可以怎麼做(排除使用 php function array_merge())?
    • 已知 array index 0 ~ 3 已被 $arr1 使用,那我們就從 array index 4 開始 set value
<?php
// 方式1
$arr2 = array( 'one'   => 11,
               'three' => 3,
               4  => 4, 12, 13, 14, 15
        );
// [4] => 4, [5] => 12, [6] => 13, [7] => 14, [8] => 15

// 方式2
$arr2 = array( 'one'   => 11,
               'three' => 3,
               'four'  => 4, 
               4       => 12, 13, 14, 15
        );
// [4] => 12, [5] => 13, [6] => 14, [7] => 15,

結語

經過一系列 + 踩坑,可以理解 + does not append or merge. 使用 + 時,請記得它的 union operator。
+ 類似的 array function 則是 array_replace()


參考文章

1 What is the difference between array_merge and array + array in PHP?
2 PHP 文件-Arrays規範

PHP Arrays
Merging two arrays with the "+" (array union operator) How does it work?
array_merge vs array_replace vs + (plus aka union) in PHP


上一篇
[Day01] 用 + 合併陣列
下一篇
[Day 03] 說好的 PHP Error Report 呢!
系列文
PHP 沿途的風景30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言