1. 程式人生 > >array_unique和array_flip 實現去重間的區別

array_unique和array_flip 實現去重間的區別

方法一​:php有內建函式array_unique可以用來刪除陣列中的重複值

array_unique -- 移除陣列中重複的值

array_unique() 接受 array 作為輸入並返回沒有重複值的新陣列。

注意鍵名保留不變。array_unique()先將值作為字串排序,然後對每個值只保留第一個遇到的鍵名,接著忽略所有後面的鍵名。這並不意味著在未排序的 array中同一個值的第一個出現的鍵名會被保留。

注: 當且僅當 (string) $elem1 === (string) $elem2時兩個單元被認為相同。就是說,當字串的表達一樣時。

第一個單元將被保留。

 

array_unique() 例子

<?php

$input = array("a"=> "green","red","b" =>"green","blue","red");

$result = array_unique($input);

print_r($result);

?>

上例將輸出:

Array

(

    [a]=> green

    [0]=> red

    [1]=> blue

)

 

方法二 :用array_flip實現去重效果

另一個方法是使用php的array_flip函式來間接的實現去重效果

array_flip是反轉陣列鍵和值的函式,他有個特性就是如果陣列中有二個值是一樣的,那麼反轉後會保留最後一個鍵和值.利用這個特性我們用他來間接的實現陣列的去重.

<?php

$arr =array("a"=>"a1","b"=>'b1',"c"=>"a2","d"=>"a1");

$arr1 = array_flip($arr);

print_r($arr1);//先反轉一次,去掉重複值,輸出Array ( [a1] => d[b1] => b [a2] => c )

$arr2 = array_flip($arr1);

print_r($arr2);//再反轉回來,得到去重後的陣列,輸出Array([d] => a1 [b] => b1 [c] => a2)

$arr3 = array_unique($arr);

print_r($arr3);//利用php的array_unique函式去重,輸出Array ( [a]=> a1 [b] => b1 [c] =>a2 )

?>

 

綜上,我們可以從$arr3和arr2輸出可以看出來array_unique和array_flip間的區別,二種方法不同的是用array_flip得到的是重複元素最後的鍵和值,用array_unique得到的是兩個重複元素第一個鍵和值