PHP數組合並和去重的函數有哪些
1、總結
一句話總結:合併:array_merge() array_merge_recursive() +號;去重:array_flip() array_unique()
array_merge() array_merge_recursive() +號 array_flip() array_unique()
一、array_merge和+以及array_merge_recursive數組合並時對相同的字符串索引的操做是怎樣的?
+前面的覆蓋後面的
array_merge後面的覆蓋前面的
array_merge_recursive增長數組維度
array_merge則會用後面的值覆蓋前面出現的值;
+會用前面出現過的值覆蓋後面相同的key;
array_merge_recursive則會把相同的索引放到一個數組裏面,增長數組的維度;php
二、array_merge和+以及array_merge_recursive數組合並時對相同的數字索引的操做是怎樣的?
array_merge和array_merge_recursive重建(新增)索引
+前面的覆蓋後面的
array_merge則會給重複的值重建索引(索引值從0開始);
+仍然是用前面出現過的值覆蓋後面的值;
array_merge_recursive和array_merge的處理方法同樣。css
三、多維數組合並去重用的是哪一個函數?
array_flip()函數-數組鍵值的翻轉函數
array_flip()函數,而這個函數也是數組鍵值的翻轉函數html
$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));
2、PHP合併數組幾種方式總結
參考:PHP合併數組幾種方式總結 - 賴牀四少 - 博客園
https://www.cnblogs.com/lcss/p/7757784.html數組
今天在作項目的時候,想將多個數組進行去重合並的操做。在此前合併數組我一直用的是array_merge()這個函數,今天我百度了一下,原來還有‘+'號,和array_merge_recursive函數。函數
下面是一段對比的代碼spa
$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));
結果以下所示code
----------------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的處理方法同樣。htm
可是這只是把數組進行合併,我作合併的同時還想要去重應該怎麼辦呢,那就用到了另外兩個函數array_flip()函數和array_keys() 函數blog
要講到數組合並與去重,這裏就不得不提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));
結合上邊這些函數的分析和使用,相信之後平常對數組合並已經基本不成問題了。