PHP三種數組合並方式區別示例
一、寫在前面
目前工作中接觸到的PHP數組合並方式主要有三種:
1、+操作符
2、array_merge()
3、array_merge_recursive()
它們的區別主要體現在對於相關鍵名(數字鍵名、字串鍵名)的處理方式,下面本文將以兩個實際例子來體現~
二、相同字串鍵
<?php
$arrFirst = [
"first_key" => 1,
"second_key" => 1,
"third_key" => 1,
];
$arrSecond = [
"first_key" => 2,
"second_key" => 2,
"fourth_key" => 2,
];
//對於重複的字串鍵,array_merge後,後面陣列的鍵值會覆蓋前面的
echo sprintf("\narray_merge result:\n%s", print_r(array_merge($arrFirst, $arrSecond), true));
//對於重複的字串鍵,+操作後,前面陣列的鍵值會覆蓋後面的
echo sprintf("\narray + result:\n%s", print_r($arrFirst + $arrSecond, true));
//對於重複的字串鍵,array_merge_recursive後,相同鍵名的鍵值會被合併到同一陣列中(會遞迴)
echo sprintf("\narray_merge_recursive result:\n%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));
執行結果:
三、相同數字鍵
<?php
$arrFirst = [
111 => "first",
222 => "first",
"first" //會指定預設的數字鍵223
];
$arrSecond = [
111 => "second",
333 => "second",
"second" //會指定預設的數字鍵334
];
//對於重複的數字鍵,+操作後,前面陣列的鍵值會覆蓋後面的,保留之前數字鍵
echo sprintf("\narray + result:\n%s", print_r($arrFirst + $arrSecond, true));
//對於重複的數字鍵,array_merge後,重排數字鍵,不會覆蓋
echo sprintf("\narray_merge result:\n%s", print_r(array_merge($arrFirst, $arrSecond), true));
//對於重複的數字鍵,array_merge_recursive後,重排數字鍵,不會覆蓋
echo sprintf("\narray_merge_recursive result:\n%s", print_r(array_merge_recursive($arrFirst, $arrSecond), true));
執行結果:
四、附:PHP陣列基礎概述
一、KEY
1、Key只能為Integer或String,可同時存在
2、包含合法整型值的字串Key會被轉化為整型儲存,如:’6’的Key會被轉化為6儲存
3、布林值Key會被轉化為整型儲存,true會被轉化為1儲存,false會被轉化為0儲存
4、Null會被轉化為空串儲存
5、如果多個Key值被轉化後為相同的值,則只使用最後一個,前面的被覆蓋,如:一個數組中依次定義了’1’、true、1的key,則最後只會儲存key為1的value,之前的值都被覆蓋
6、如果未指定Key,則會被自動設定為之前用過的最大的整型Key+1,最小為0二、VALUE
1、可以為PHP任意型別(字串、整形、浮點型、布林型、物件、陣列、NULL、資源型別)三、其他型別轉化為陣列型別
1、Integer、String、Float、Boolean、Resource型別轉化為陣列型別時,會被自動分配Key為0,Value為其原值
2、Object型別轉化為陣列型別時,成員變數名會作為陣列Key,私有屬性的Key會加上類名字首,保護屬性的Key會加上’*’字首
3、Null會被轉化為空陣列四、foreach
1、兩種形式,foreach(key => arr as
value是值傳遞,使用&value會被保留,為防止在多次foreach時出現問題,可以在一次foreach後unset($value)或使用不同的變數