php合併數組的三種方式:“+”運算符、array_merge、array_merge_recursive

“+”運算符

當兩個數組的鍵名是 數字鍵名 或者 字符串鍵名 可以直接 +,$c = $a + $b,在$a後追加($b在$a中不存在的鍵名)鍵名和值。

/* “+”運算符、 */
$jiaArr = array(
	'1'=>'xiaoli',
	'2'=>'xiaohua',
	'3'=>'xiaoming',
	't'=>'teacher',
);

$jiaBrr = array(
	'4'=>'xiaolis',
	'5'=>'xiaohuas',
	'6'=>'xiaomings',
	't'=>'teachers',
);
$jiaAll = $jiaArr + $jiaBrr;
var_dump($jiaAll);

/*瀏覽器output:
array(7) {
  [1]=>
  string(6) "xiaoli"
  [2]=>
  string(7) "xiaohua"
  [3]=>
  string(8) "xiaoming"
  ["t"]=>
  string(7) "teacher"
  [4]=>
  string(7) "xiaolis"
  [5]=>
  string(8) "xiaohuas"
  [6]=>
  string(9) "xiaomings"
}
 */

這個鍵值在前面出現了,所以不追加到 $jiaArr 中;

 

array_merge

將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回作爲結果的數組。 如果輸入的數組中有相同的字符串鍵名,則該鍵名後面的值將覆蓋前一個值。注意:如果數組包含數字鍵名,後面的值將不會覆蓋原來的值,而是附加到後面。 如果只給了一個數組並且該數組是數字索引的,則鍵名會以連續方式重新索引

/* array_merge、 */

$jiaArr = array(
	'name1'=>'xiaoli',
	'name2'=>'xiaohua',
	'name3'=>'xiaoming',
	'1'=>'teacher',
);

$jiaBrr = array(
	'name1'=>'xiaolis',
	'name5'=>'xiaohuas',
	'name6'=>'xiaomings',
	'1'=>'teachers',
);
$jiaAll = array_merge($jiaArr,$jiaBrr);
var_dump($jiaAll);

/*瀏覽器output:
array(7) {
  ["name1"]=>
  string(7) "xiaolis"
  ["name2"]=>
  string(7) "xiaohua"
  ["name3"]=>
  string(8) "xiaoming"
  [0]=>
  string(7) "teacher"
  ["name5"]=>
  string(8) "xiaohuas"
  ["name6"]=>
  string(9) "xiaomings"
  [1]=>
  string(8) "teachers"
}

*/

相同普通鍵值會後面覆蓋如;name1這個鍵值,把xiaoli覆蓋爲xiaolis; 數字鍵值會被重新索引加到數組內,如兩個數組中的 1 的鍵值重新排索引爲 0 1

 

array_merge_recursive

將一個或多個數組的單元合併起來,一個數組中的值附加在前一個數組的後面。返回作爲結果的數組。 

其實這個就是array_merge的升級版array_merge的基礎上加入下面功能: 如果相同鍵值,爲數字時和array_merge一樣,重新索引;如果爲字符串的時候後面不再覆蓋前面,而是而是附加到後面,方式爲遞歸追加;如:


/* array_merge_recursive */
$jiaArr = array(
	'name1'=>'xiaoli',
	'name2'=>'xiaohua',
	'name3'=>'xiaoming',
	'1'=>'teacher',
);

$jiaBrr = array(
	'name1'=>'xiaolis',
	'name5'=>'xiaohuas',
	'name6'=>'xiaomings',
	'1'=>'teachers',
);
$jiaAll = array_merge_recursive($jiaArr,$jiaBrr);
var_dump($jiaAll);

/*瀏覽器output:

array(7) {
  ["name1"]=>
  array(2) {
    [0]=>
    string(6) "xiaoli"
    [1]=>
    string(7) "xiaolis"
  }
  ["name2"]=>
  string(7) "xiaohua"
  ["name3"]=>
  string(8) "xiaoming"
  [0]=>
  string(7) "teacher"
  ["name5"]=>
  string(8) "xiaohuas"
  ["name6"]=>
  string(9) "xiaomings"
  [1]=>
  string(8) "teachers"
}

*/

name1 兩個數組都有,沒有覆蓋而是遞歸方式追加,1 數組鍵值仍被重新排序;

 

註釋:定義部分來自網上

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章