PHP數組合並和去重的函數有哪些


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_recursivearray_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_recursivearray_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));

 

 

 

結合上邊這些函數的分析和使用,相信以后日常對數組合並已經基本不成問題了。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM