PHP三種數組合並方式區別示例

1、寫在前面

目前工做中接觸到的PHP數組合並方式主要有三種:
一、+操做符
二、array_merge()
三、array_merge_recursive()php

它們的區別主要體如今對於相同鍵名(數字鍵名、字符串鍵名)的處理方式,下面本文將以兩個實際例子來體現~數組

2、相同字符串鍵

<?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));

運行結果:
clipboard.pngspa

3、相同數字鍵

<?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));

運行結果:指針

clipboard.png

4、附:PHP數組基礎概述

1、KEY
一、Key只能爲Integer或String,可同時存在
二、包含合法整型值的字符串Key會被轉化爲整型存儲,如:'6'的Key會被轉化爲6存儲
三、布爾值Key會被轉化爲整型存儲,true會被轉化爲1存儲,false會被轉化爲0存儲
四、Null會被轉化爲空串存儲
五、若是多個Key值被轉化後爲相同的值,則只使用最後一個,前面的被覆蓋,如:一個數組中依次定義了'1'、true、1的key,則最後只會存儲key爲1的value,以前的值都被覆蓋
六、若是未指定Key,則會被自動設定爲以前用過的最大的整型Key+1,最小爲0

2、VALUE
一、能夠爲PHP任意類型(字符串、整形、浮點型、布爾型、對象、數組、NULL、資源類型)code

3、其餘類型轉化爲數組類型
一、Integer、String、Float、Boolean、Resource類型轉化爲數組類型時,會被自動分配Key爲0,Value爲其原值
二、Object類型轉化爲數組類型時,成員變量名會做爲數組Key,私有屬性的Key會加上類名前綴,保護屬性的Key會加上'*'前綴
三、Null會被轉化爲空數組對象

4、foreach
一、兩種形式,foreach($arr as $key => $value)與foreach($arr as
$value),其中$value是值傳遞,使用&$value是引用傳遞
二、遍歷依賴數組內部指針
三、遍歷結束後,$value會被保留,爲防止在屢次foreach時出現問題,能夠在一次foreach後unset($value)或使用不一樣的變量blog

相關文章
相關標籤/搜索