PHP數組合並和去重的函數有哪些
一、總結
一句話總結:合並:array_merge() array_merge_recursive() +號;去重:array_flip() array_unique()
array_merge() array_merge_recursive() +號 array_flip() array_unique()
1、array_merge和+以及array_merge_recursive數組合並時對相同的字符串索引的操作是怎樣的?
+前面的覆蓋后面的
array_merge后面的覆蓋前面的
array_merge_recursive增加數組維度
array_merge則會用后面的值覆蓋前面出現的值;
+會用前面出現過的值覆蓋后面相同的key;
array_merge_recursive則會把相同的索引放到一個數組里面,增加數組的維度;
2、array_merge和+以及array_merge_recursive數組合並時對相同的數字索引的操作是怎樣的?
array_merge和array_merge_recursive重建(新增)索引
+前面的覆蓋后面的
array_merge則會給重復的值重建索引(索引值從0開始);
+仍然是用前面出現過的值覆蓋后面的值;
array_merge_recursive和array_merge的處理方法一樣。
3、多維數組合並去重用的是哪個函數?
array_flip()函數-數組鍵值的翻轉函數
array_flip()函數,而這個函數也是數組鍵值的翻轉函數
$a = array('1001','1002'); $b = array('1002','1003','1004'); $c = array('1003','1004','1005'); $d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));
二、PHP合並數組幾種方式總結
參考:PHP合並數組幾種方式總結 - 賴床四少 - 博客園
https://www.cnblogs.com/lcss/p/7757784.html
今天在做項目的時候,想將多個數組進行去重合並的操作。在此前合並數組我一直用的是array_merge()這個函數,今天我百度了一下,原來還有‘+'號,和array_merge_recursive函數。
下面是一段對比的代碼
$array1 = array(2,4,"color" => "red"); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); echo "----------------array_merge---------------".PHP_EOL; print_r($result); echo "----------------+++++++++++---------------".PHP_EOL; print_r($array1+$array2); echo "----------------array_merge_recursive---------------".PHP_EOL; print_r(array_merge_recursive($array1,$array2));
結果如下所示
----------------array_merge---------------Array( [0] => 2 [1] => 4 [color] => green [2] => a [3] => b [shape] => trapezoid [4] => 4)
----------------+++++++++++---------------Array( [0] => 2 [1] => 4 [color] => red [shape] => trapezoid [2] => 4)
----------------array_merge_recursive---------------Array( [0] => 2 [1] => 4 [color] => Array ( [0] => red [1] => green ) [2] => a [3] => b [shape] => trapezoid [4] => 4)
對比array_merge和+以及array_merge_recursive結果的”color”的值我們可以看出:
1.對於相同的字符串索引,
array_merge則會用后面的值覆蓋前面出現的值;
+會用前面出現過的值覆蓋后面相同的key;
array_merge_recursive則會把相同的索引放到一個數組里面,增加數組的維度;
2.對於相同的數字索引,
array_merge則會給重復的值重建索引(索引值從0開始);
+仍然是用前面出現過的值覆蓋后面的值;
array_merge_recursive和array_merge的處理方法一樣。
但是這只是把數組進行合並,我做合並的同時還想要去重應該怎么辦呢,那就用到了另外兩個函數array_flip()函數和array_keys() 函數
要講到數組合並與去重,這里就不得不提array_flip()函數,而這個函數也是數組鍵值的翻轉函數。
For example:
$arr=array('10','11','12');$arr2=array('12','13','14');$arr3=array('14','15','16'); print_r(array_flip($arr)+array_flip($arr2)+array_flip($arr3)); output: Array ( [10] => 0 [11] => 1 [12] => 2 [13] => 1 [14] => 2 [15] => 1 [16] => 2 )
1.單數組去重復
array_unique($arrTest)
array_unique() 函數移除數組中的重復的值,並返回結果數組。
當幾個數組元素的值相等時,只保留第一個元素,其他的元素被刪除。
返回的數組中鍵名不變。
<?php $a=array("a"=>"red","b"=>"green","c"=>"red"); print_r(array_unique($a)); ?> 運行結果:Array ( [a] => red [b] => green )
//2.多數組去重復
array_keys(array_flip($arr1)+array_flip($arr2))
array_keys() 函數返回包含數組中所有鍵名的一個新數組。
如果提供了第二個參數,則只返回鍵值為該值的鍵名。
返回包含數組中所有鍵名的一個新數組:
<?php $a=array("Volvo"=>"XC90","BMW"=>"X5","Toyota"=>"Highlander"); print_r(array_keys($a)); ?> 運行結果:Array ( [a] => red [b] => green ) Array ( [0] => Volvo [1] => BMW [2] => Toyota )
對多個數組合並去重技巧
$a = array('1001','1002'); $b = array('1002','1003','1004'); $c = array('1003','1004','1005'); $d = array_keys(array_flip($a) + array_flip($b) + array_flip($c));
結合上邊這些函數的分析和使用,相信以后日常對數組合並已經基本不成問題了。