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