1. 程式人生 > >PHP三種數組合並方式區別示例

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(arraskey => value)foreach(arr as
value)value是值傳遞,使用&value23value會被保留,為防止在多次foreach時出現問題,可以在一次foreach後unset($value)或使用不同的變數