array_merge是很常用的數組合並函數,但是使用時可能會存在一些問題,開發時碰到了,記錄一下
如下代碼:
$arr = array();
$arr1 = array(
'100' => 'wmj100',
'101' => 'wmj101',
'102' => 'wmj102',
'103' => 'wmj103',
'104' => 'wmj104',
);
$arr2 = array(
'105' => 'wmj105',
'106' => 'wmj106',
'107' => 'wmj107',
'108' => 'wmj108',
'109' => 'wmj109',
);
$arr3 = array(
'110' => 'wmj110',
'111' => 'wmj111',
'112' => 'wmj112',
'113' => 'wmj113',
'114' => 'wmj114',
);
$arr = array_merge($arr1, $arr2, $arr3);
var_dump($arr);
以上代碼會輸出:
可以看出數組的鍵名已經被重置了,這有些時候是不符合我們的需求的,查閱手冊:
如果是數字索引,array_merge後會重置索引從0開始變爲一個新的索引數組。
------------------------------------------------------------------------------------------------------------------------
嘗試關聯數組:
<?php
$arr = array();
$arr1 = array(
'skr100'=>'wmj100',
'skr101'=>'wmj101',
'skr102'=>'wmj102',
'skr103'=>'wmj103',
'skr104'=>'wmj104',
);
$arr2 = array(
'skr105'=>'wmj105',
'skr106'=>'wmj106',
'skr107'=>'wmj107',
'skr108'=>'wmj108',
'skr109'=>'wmj109',
);
$arr3 = array(
'skr110'=>'wmj110',
'skr111'=>'wmj111',
'skr112'=>'wmj112',
'skr113'=>'wmj113',
'skr114'=>'wmj114',
);
$arr1 = array_merge($arr1,$arr2,$arr3);
var_dump($arr1);
查看結果,skr,發現鍵名都保留了
------------------------------------------------------------------------------------------------------------------
那麼如果我們想要得到數字索引的合併結果應該如何做呢?查閱資料得知,php使用數組相加即可:
<?php
$arr1 = array(
'100'=>'wmj100',
'101'=>'wmj101',
'102'=>'wmj102',
'103'=>'wmj103',
'104'=>'wmj104',
);
$arr2 = array(
'105'=>'wmj105',
'106'=>'wmj106',
'107'=>'wmj107',
'108'=>'wmj108',
'109'=>'wmj109',
);
$arr3 = array(
'110'=>'wmj110',
'111'=>'wmj111',
'112'=>'wmj112',
'113'=>'wmj113',
'114'=>'wmj114',
);
$arr1 = $arr1+$arr2+$arr3;
var_dump($arr1);
執行結果:
因爲php弱類型語言的緣故,所以即使使用字符串的數字鍵名,使用array_merge也會重置爲索引數組,如果想要得到鍵名不被重置的合併結果,可以使用+,根據需求使用,切不可大意,對代碼心存敬畏之心。