php中數組的並集、交集和差集合函式介紹_PHP教程

來源:互聯網
上載者:User
在php中如果我想要對兩個數組進行如並集、交集和差集操作,我們可直接使用php內建的函數來操作如array_merge(),array_intersect(),array_diff().

//計算數組的合并 array_merge與“+”的區別
array_merge() 函數把兩個或多個數組合并為一個數組。

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

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

代碼如下 複製代碼

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

http://www.bkjia.com/PHPjc/633094.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/633094.htmlTechArticle在php中如果我想要對兩個數組進行如並集、交集和差集操作,我們可直接使用php內建的函數來操作如array_merge(),array_intersect(),array_diff(). //計...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.