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得到的是兩個重複元素第一個鍵和值