PHP合並數組幾種方式總結


今天在做項目的時候,想將多個數組進行去重合並的操作。在此前合並數組我一直用的是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