array_merge和array的區別分析
阿新 • • 發佈:2018-06-06
一個 格式 pytho int 比較 和數 AS array ava
記得之前發現很多朋友用過array+array的方式,今天索性再聊下這樣的話題:如何獲取字符鍵名相同值不同的兩個數組值集合?讓我認真比較了下PHP中array_merge和array相加的區別
首先來看看鍵名是string,兩者區別:
<?php $arr1 = array(‘a‘=>‘PHP‘); $arr2 = array(‘a‘=>‘PYTHON‘); print_r(array_merge($arr1,$arr2)); //Array ( [a] => PYTHON ) 如果鍵名為字符,且鍵名相同,array_merge()後面數組元素值會覆蓋前面數組元素值 print_r($arr1+$arr2); //Array ( [a] => PHP )如果鍵名為字符,且鍵名相同,數組相加會將最先出現的值作為結果
//再比如
$arr1 = array(‘a‘=>‘1‘,‘b‘=>‘2‘);
$arr2 = array(‘a‘=>‘1‘,‘b‘=>‘3‘,‘c‘=>‘2‘);
$ret = array_merge($arr1,$arr2);
print_r($ret);//Array ( [a] => 1 [b] => 3 [c] => 2 )
$ret = $arr1+$arr2;
print_r($ret);//Array ( [a] => 1 [b] => 2 [c] => 2 )
如果鍵名是數字,兩者區別:
<?php $arr1 = array("JAVA","PHP"); $arr2 = array("PYTHON","PHP"); print_r(array_merge($arr1,$arr2));//Array ( [0] => JAVA [1] => PHP [2] => PYTHON [3] => PHP ) 如果鍵名為數字,array_merge()不會進行覆蓋 print_r($arr1+$arr2);//Array ( [0] => JAVA [1] => PHP )如果鍵名為數字,數組相加會將最先出現的值作為結果,後面鍵名相同的會被拋棄
//再比如
$arr1 = array(1=>‘1‘,2=>‘2‘);
$arr2 = array(1=>‘1‘,2=>‘3‘,8=>‘2‘);
$ret = array_merge($arr1,$arr2);
print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 3 [4] => 2 ) 如果數組中的鍵名為數字時,會格式化鍵名並保留所有鍵值。
//再比如
$arr1 = array(1,2);
$arr2 = array(1,2,8);
$ret = array_merge($arr1,$arr2);
print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 8 )
?>
特別要註意。關於“array_merge和數組相加的區別”上面已經闡述的很清楚了,回到我最初的問題“如何最有效的獲取字符鍵名相同值不同的兩個數組值集合呢”,不會這要對每個數組遍歷吧,PHP中還有一個函數:array_merge_recursive
— 遞歸地合並一個或多個數組,如果輸入的數組中有相同的字符串鍵名,則這些值會被合並到一個數組中去。如下例:
<?php $arr1 = array("a"=>"PHP","C"); $arr2 = array("a"=>"JAVA","C","PYTHON"); print_r(array_merge_recursive($arr1, $arr2)); //Array ( [a] => Array ( [0] => PHP [1] => JAVA ) [0] => C [1] => C [2] => PYTHON ) ?>
array_merge和array的區別分析