PHP求並集,交集,差集


PHP求並集,交集,差集

一、總結

一句話總結:在php中如果我想要對兩個數組進行如並集、交集和差集操作,我們可直接使用php自帶的函數來操作如array_merge(),array_intersect(),array_diff().

array_merge() array_intersect() array_diff()

 

1、php中如何求並集?

array_merge() +

計算數組的合並 array_merge與“+”的區別

array_merge() 函數把兩個或多個數組合並為一個數組。

如果鍵名有重復,該鍵的鍵值為最后一個鍵名對應的值(后面的覆蓋前面的),如果數組是數字索引的,則鍵名會以連續方式重新索引。

注釋:如果僅僅向 array_merge() 函數輸入了一個數組,且鍵名是整數,則該函數將返回帶有整數鍵名的新數組,其鍵名以 0 開始進行重新索引.代碼如下:

  1. $a = array(1 => 'a', 'b', 'c');
  2. $b = array(1 => 'aa', 2, 'c');
  3. $union = array_merge($a, $b);
  4. $plus = $a + $b;
  5. print_r($union);
  6. print_r($plus);
  7. //結果依次為:
  8. Array
  9. {
  10. [0]=> a
  11. [1]=> b
  12. [2]=> c
  13. [3]=> aa
  14. [4]=> 2
  15. [5]=> c
  16. }
  17. Array
  18. (
  19. [1] => a
  20. [2] => b
  21. [3] => c
  22. )

要合並的兩個數組中有相同的字符串鍵的時候,使用array_merge()會覆蓋掉原來的值,而使用“+”合並數組則會和用“+”號合並數組相同數字鍵一樣把最先出現的值作為最終結果返回,如下例:

  1. $a2 = array('str' => 'a', 'b', 'c');
  2. $b2 = array('str' => 'aa', 2, 'c');
  3. $union2 = array_merge($a2, $b2);
  4. $plus2 = $a2 + $b2;
  5. print_r($union2);
  6. print_r($plus2);
  7. //結果依次為:
  8. Array
  9. (
  10. [str] => aa
  11. [0] => b
  12. [1] => c
  13. [2] => 2
  14. [3] => c
  15. )
  16. Array
  17. (
  18. [str] => a
  19. [0] => b
  20. [1] => c
  21. )

注:如果想用array_merge合並兩個數組,返回結果可能還會有相同的元素,這時候可以用array_unique()把相同的元素去掉

 

2、php合並 array_merge與“+”的區別是什么?

+ 合並索引

array_merge() 函數把兩個或多個數組合並為一個數組。

如果鍵名有重復,該鍵的鍵值為最后一個鍵名對應的值(后面的覆蓋前面的),如果數組是數字索引的,則鍵名會以連續方式重新索引。

注釋:如果僅僅向 array_merge() 函數輸入了一個數組,且鍵名是整數,則該函數將返回帶有整數鍵名的新數組,其鍵名以 0 開始進行重新索引.代碼如下:

  1. $a = array(1 => 'a', 'b', 'c');
  2. $b = array(1 => 'aa', 2, 'c');
  3. $union = array_merge($a, $b);
  4. $plus = $a + $b;
  5. print_r($union);
  6. print_r($plus);
  7. //結果依次為:
  8. Array
  9. {
  10. [0]=> a
  11. [1]=> b
  12. [2]=> c
  13. [3]=> aa
  14. [4]=> 2
  15. [5]=> c
  16. }
  17. Array
  18. (
  19. [1] => a
  20. [2] => b
  21. [3] => c
  22. )

要合並的兩個數組中有相同的字符串鍵的時候,使用array_merge()會覆蓋掉原來的值,而使用“+”合並數組則會和用“+”號合並數組相同數字鍵一樣把最先出現的值作為最終結果返回,如下例:

  1. $a2 = array('str' => 'a', 'b', 'c');
  2. $b2 = array('str' => 'aa', 2, 'c');
  3. $union2 = array_merge($a2, $b2);
  4. $plus2 = $a2 + $b2;
  5. print_r($union2);
  6. print_r($plus2);
  7. //結果依次為:
  8. Array
  9. (
  10. [str] => aa
  11. [0] => b
  12. [1] => c
  13. [2] => 2
  14. [3] => c
  15. )
  16. Array
  17. (
  18. [str] => a
  19. [0] => b
  20. [1] => c
  21. )

注:如果想用array_merge合並兩個數組,返回結果可能還會有相同的元素,這時候可以用array_unique()把相同的元素去掉

 

3、php中如何求交集?

array_intersect()

array_intersect() 函數返回兩個或多個數組的交集數組,結果數組包含了所有在被比較數組中,也同時出現在所有其他參數數組中的值,鍵名保留不變,注釋:僅有值用於比較,代碼如下:

  1. $a = array('jpg','png','gif','bmp');
  2. $b = array('JPG','txt','docx','bmp');
  3. $intersection = array_intersect($a, $b);

還可以通過函數,獲取自己想要的(比如元素不區分大小寫),代碼如下:

  1. $intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b));
  2. print_r($intersection);
  3. print_r($intersection2);
  4. //結果依次為:
  5. Array
  6. (
  7. [3] => bmp
  8. )
  9. Array (
  10. [0] => jpg
  11. [3] => bmp
  12. )

 

 

 

4、php中如何求差集?

array_diff()

計算數組的差集,代碼如下:

  1. $old = array('jpg','png','gif','bmp');
  2. $new = array('JPG','txt','docx','bmp');
  3. $difference = array_diff($old, $new);

注:返回結果的元素包含$old的元素,不包括$new的元素

print_r($difference);

結果為:

  1. Array
  2. (
  3. [0] => jpg
  4. [1] => png
  5. [2] => gif
  6. )

也可以用函數先進行處理,再計算差集

array_diff() 函數返回兩個數組的差集數組。該數組包括了所有在被比較的數組中,但是不在任何其他參數數組中的鍵值,在返回的數組中,鍵名保持不變。

語法:array_diff(array1,array2,array3...)

代碼如下:

  1. $difference = array_diff(array_map('strtolower',$old),
  2. array_map('strtolower',$new));

 


 

 

二、PHP數組的幾個操作,求並集,交集,差集,數組與字符串的相互轉換及數組去重

參考:PHP數組的幾個操作,求並集,交集,差集,數組與字符串的相互轉換及數組去重 - shao.bing的專欄 - CSDN博客
https://blog.csdn.net/shaobingj126/article/details/51814726

在php中如果我想要對兩個數組進行如並集、交集和差集操作,我們可直接使用php自帶的函數來操作如array_merge(),array_intersect(),array_diff().

計算數組的合並 array_merge與“+”的區別

array_merge() 函數把兩個或多個數組合並為一個數組。

如果鍵名有重復,該鍵的鍵值為最后一個鍵名對應的值(后面的覆蓋前面的),如果數組是數字索引的,則鍵名會以連續方式重新索引。

注釋:如果僅僅向 array_merge() 函數輸入了一個數組,且鍵名是整數,則該函數將返回帶有整數鍵名的新數組,其鍵名以 0 開始進行重新索引.代碼如下:

  1. $a = array(1 => 'a', 'b', 'c');
  2. $b = array(1 => 'aa', 2, 'c');
  3. $union = array_merge($a, $b);
  4. $plus = $a + $b;
  5. print_r($union);
  6. print_r($plus);
  7. //結果依次為:
  8. Array
  9. {
  10. [0]=> a
  11. [1]=> b
  12. [2]=> c
  13. [3]=> aa
  14. [4]=> 2
  15. [5]=> c
  16. }
  17. Array
  18. (
  19. [1] => a
  20. [2] => b
  21. [3] => c
  22. )

要合並的兩個數組中有相同的字符串鍵的時候,使用array_merge()會覆蓋掉原來的值,而使用“+”合並數組則會和用“+”號合並數組相同數字鍵一樣把最先出現的值作為最終結果返回,如下例:

  1. $a2 = array('str' => 'a', 'b', 'c');
  2. $b2 = array('str' => 'aa', 2, 'c');
  3. $union2 = array_merge($a2, $b2);
  4. $plus2 = $a2 + $b2;
  5. print_r($union2);
  6. print_r($plus2);
  7. //結果依次為:
  8. Array
  9. (
  10. [str] => aa
  11. [0] => b
  12. [1] => c
  13. [2] => 2
  14. [3] => c
  15. )
  16. Array
  17. (
  18. [str] => a
  19. [0] => b
  20. [1] => c
  21. )

注:如果想用array_merge合並兩個數組,返回結果可能還會有相同的元素,這時候可以用array_unique()把相同的元素去掉

計算數組的交集

array_intersect() 函數返回兩個或多個數組的交集數組,結果數組包含了所有在被比較數組中,也同時出現在所有其他參數數組中的值,鍵名保留不變,注釋:僅有值用於比較,代碼如下:

  1. $a = array('jpg','png','gif','bmp');
  2. $b = array('JPG','txt','docx','bmp');
  3. $intersection = array_intersect($a, $b);

還可以通過函數,獲取自己想要的(比如元素不區分大小寫),代碼如下:

  1. $intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b));
  2. print_r($intersection);
  3. print_r($intersection2);
  4. //結果依次為:
  5. Array
  6. (
  7. [3] => bmp
  8. )
  9. Array (
  10. [0] => jpg
  11. [3] => bmp
  12. )

計算數組的差集,代碼如下:

  1. $old = array('jpg','png','gif','bmp');
  2. $new = array('JPG','txt','docx','bmp');
  3. $difference = array_diff($old, $new);

注:返回結果的元素包含$old的元素,不包括$new的元素

print_r($difference);

結果為:

  1. Array
  2. (
  3. [0] => jpg
  4. [1] => png
  5. [2] => gif
  6. )

也可以用函數先進行處理,再計算差集

array_diff() 函數返回兩個數組的差集數組。該數組包括了所有在被比較的數組中,但是不在任何其他參數數組中的鍵值,在返回的數組中,鍵名保持不變。

語法:array_diff(array1,array2,array3...)

代碼如下:

  1. $difference = array_diff(array_map('strtolower',$old),
  2. array_map('strtolower',$new));

 

數組轉換為字符串:

 

<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>

 

字符串轉換為數組:

<?php
$str="1432532 ,4444";

$arr = explode(",",$str);
echo count($arr)."</br>";

print_r($arr);
?>

數組元素值去重

 

<?php
$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));
?>

 

 

針對有空格的字符串轉換成無空格的字符串

<?php
$str="1432532 ,67878";

$arr = explode(",",$str);
//echo count($arr)."</br>";

$str_u='';

for($i=0;$i<count($arr);$i++)
{

$str_u .=trim($arr[$i]).',';

}
echo $str_u;

?>

 

 


免責聲明!

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



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