php中數組的并集、交集和差集函數介紹
來源:程序員人生 發布時間:2013-10-09 01:52:32 閱讀次數:3802次
在php中如果我想要對兩個數組進行如并集、交集和差集操作,我們可直接使用php自帶的函數來操作如array_merge(),array_intersect(),array_diff().
計算數組的合并 array_merge與“+”的區別
array_merge() 函數把兩個或多個數組合并為一個數組。
如果鍵名有重復,該鍵的鍵值為最后一個鍵名對應的值(后面的覆蓋前面的),如果數組是數字索引的,則鍵名會以連續方式重新索引。
注釋:如果僅僅向 array_merge() 函數輸入了一個數組,且鍵名是整數,則該函數將返回帶有整數鍵名的新數組,其鍵名以 0 開始進行重新索引.代碼如下:
- $a = array(1 => 'a', 'b', 'c');
- $b = array(1 => 'aa', 2, 'c');
- $union = array_merge($a, $b);
- $plus = $a + $b;
- print_r($union);
- print_r($plus);
-
- Array
- {
- [0]=> a
- [1]=> b
- [2]=> c
- [3]=> aa
- [4]=> 2
- [5]=> c
- }
- Array
- (
- [1] => a
- [2] => b
- [3] => c
- )
要合并的兩個數組中有相同的字符串鍵的時候,使用array_merge()會覆蓋掉原來的值,而使用“+”合并數組則會和用“+”號合并數組相同數字鍵一樣把最先出現的值作為最終結果返回,如下例:
- $a2 = array('str' => 'a', 'b', 'c');
- $b2 = array('str' => 'aa', 2, 'c');
- $union2 = array_merge($a2, $b2);
- $plus2 = $a2 + $b2;
- print_r($union2);
- print_r($plus2);
-
- Array
- (
- [str] => aa
- [0] => b
- [1] => c
- [2] => 2
- [3] => c
- )
- Array
- (
- [str] => a
- [0] => b
- [1] => c
- )
注:如果想用array_merge合并兩個數組,返回結果可能還會有相同的元素,這時候可以用array_unique()把相同的元素去掉
計算數組的交集
array_intersect() 函數返回兩個或多個數組的交集數組,結果數組包含了所有在被比較數組中,也同時出現在所有其他參數數組中的值,鍵名保留不變,注釋:僅有值用于比較,代碼如下:
- $a = array('jpg','png','gif','bmp');
- $b = array('JPG','txt','docx','bmp');
- $intersection = array_intersect($a, $b);
還可以通過函數,獲取自己想要的(比如元素不區分大小寫),代碼如下:
- $intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b));
- print_r($intersection);
- print_r($intersection2);
-
- Array
- (
- [3] => bmp
- )
- Array (
- [0] => jpg
- [3] => bmp
- )
計算數組的差集,代碼如下:
- $old = array('jpg','png','gif','bmp');
- $new = array('JPG','txt','docx','bmp');
- $difference = array_diff($old, $new);
注:返回結果的元素包含$old的元素,不包括$new的元素
print_r($difference);
結果為:
- Array
- (
- [0] => jpg
- [1] => png
- [2] => gif
- )
也可以用函數先進行處理,再計算差集
array_diff() 函數返回兩個數組的差集數組。該數組包括了所有在被比較的數組中,但是不在任何其他參數數組中的鍵值,在返回的數組中,鍵名保持不變。
語法:array_diff(array1,array2,array3...)
代碼如下:
- $difference = array_diff(array_map('strtolower',$old),
- array_map('strtolower',$new));
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈