"b")和array(0 =&> "c", 1 =&> "d")合併之後為array(0 =&> "a", 1 =&> "b", 2 =&> "c", 3 =&> "d"),我試過php自帶的那兩個合..." />

php如何實現數組合併但鍵值相同的數組不互相覆蓋?

比如說array(0 =&> "a", 1 =&> "b")和array(0 =&> "c", 1 =&> "d")合併之後為array(0 =&> "a", 1 =&> "b", 2 =&> "c", 3 =&> "d"),我試過php自帶的那兩個合併數組的函數,都達不到這個目的。


數組合併array_merge($arr1,$arr2)和數組相加$arr1+$arr2的區別:

數字索引數組:

array_merge:合併生成的數組的索引統一從0開始,所以不存在覆蓋的情況.

"+"操作符:不改變數字索引,如果索引已經存在,則跳過該元素.

字元索引數組:

array_merge:如果兩個數組存在相同的鍵,後面的一個會覆蓋前面的.

"+"操作符:如果兩個數組存在相同的鍵,前面的一個會覆蓋後面的.

& "a", "k2" =&> "b");
$arr2 = array("k1" =&> "c", "k2" =&> "d");
var_export(array_merge($arr1, $arr2)); // array("k1" =&> "c", "k2" =&> "d")
var_export($arr1 + $arr2); // array("k1" =&> "a", "k2" =&> "b")
?&>

& "a", 1 =&> "b");
$arr2 = array(0 =&> "c", 1 =&> "d");
var_export(array_merge($arr1, $arr2)); // array (0 =&> "a", 1 =&> "b", 2 =&> "c", 3 =&> "d")
var_export($arr1 + $arr2); // array (0 =&> "a", 1 =&> "b")
?&>

所以,樓主舉例的情況,用array_merge即可.


謝邀,使用數組的array_push將後兩個函數的值壓入前一個函數中,然後再使用array_value生成一個新的函數就可以了。

或者還是用你使用的自帶合併函數,merge,然後再用array_value生成新的數組也是可以的


/**
* @author 昌維&<867597730@qq.com&>
* @param array
* @return array
*/
function array_add($a1,$a2){
$n = 0;
foreach ($a1 as $key =&> $value) {
$re[$n] = $value;
$n++;
}
foreach ($a2 as $key =&> $value) {
$re[$n] = $value;
$n++;
}
return $re;
}

用這個函數,a1和a2就是要合併的兩個數組,返回合併後的數組


array_replace_recursive()
array array_replace_recursive ( array $array1 , array $array2 [, array $... ] )


array_replace_recursive()


換個存法

&
array(2) {
[0]=&>
int(0)
[1]=&>
string(1) "a"
}
[1]=&>
array(2) {
[0]=&>
int(1)
[1]=&>
string(1) "b"
}
[2]=&>
array(2) {
[0]=&>
int(0)
[1]=&>
string(1) "c"
}
[3]=&>
array(2) {
[0]=&>
int(1)
[1]=&>
string(1) "d"
}
}
*/


PHP array_merge_recursive() 函數


推薦閱讀:

學哪種編程語言能保住一頭秀髮?
.net的網站數據,可以轉到php程序里用嗎?
為什麼 C++ / PHP / Delphi / C# 的設計者都是丹麥人?
各個編程語言都有哪些「亮點」?
PHP7 出來之後,HHVM 還有什麼優勢嗎?

TAG:PHP | 後端技術 | 編程 | ZendFramework | ThinkPHP |