在PHP中,數組是常用的數據類型之一。在進行數組操作時,經常會遇到需要去除數組中的重複元素的情況。這時,PHP中的array_unique函數就變得非常重要。
一、array_unique函數的基本使用
array_unique函數可以對數組進行去重操作,並返回一個新數組。
$oldArr = array('apple', 'banana', 'apple', 'orange'); $newArr = array_unique($oldArr); print_r($newArr);
輸出結果為:
Array ( [0] => apple [1] => banana [3] => orange )
可以看到,$oldArr數組中的重複元素被去掉了。
二、array_unique函數的高級使用
1. 對多維數組進行去重。
當數組元素為數組時,array_unique函數只能去除第一維數組中的重複元素。如果需要對多維數組進行去重操作,我們可以使用下面的方法:
function array_multi_unique($multiArray) { $uniqueArray = array(); foreach ($multiArray as $k => $v) { if(!in_array($v, $uniqueArray)) { $uniqueArray[] = $v; } } return $uniqueArray; } $oldArr = array( array('apple', 'banana', 'apple', 'orange'), array('apple', 'pear'), array('banana', 'orange', 'orange') ); $newArr = array_map('array_multi_unique', $oldArr); print_r($newArr);
輸出結果為:
Array ( [0] => Array ( [0] => apple [1] => banana [3] => orange ) [1] => Array ( [0] => apple [1] => pear ) [2] => Array ( [0] => banana [1] => orange ) )
可以看到,$oldArr數組中的重複元素被去掉了。
2. 去除數組中重複元素,並保留重複元素的鍵名。
有時候我們需要刪除重複元素,但是要保留重複元素的鍵名。可以使用array_unique函數結合array_flip函數實現:
$oldArr = array('apple', 'banana', 'apple', 'orange'); $newArr = array_flip(array_flip($oldArr)); print_r($newArr);
輸出結果為:
Array ( [0] => apple [1] => banana [3] => orange )
可以看到,$oldArr數組中的重複元素被去掉了,並保留了重複元素的鍵名。
三、array_unique函數的注意事項
1. 副作用。
使用array_unique函數時,需要注意它會「重置」數組下標。例如:
$oldArr = array('apple', 'banana', 'apple', 'orange'); $newArr = array_unique($oldArr); print_r($newArr); echo count($newArr);
輸出結果為:
Array ( [0] => apple [1] => banana [3] => orange ) 3
注意到輸出結果的第二個3,這是因為去重後的$newArr數組下標從0開始重新計數了,但count函數統計的數組元素個數還是按照原來的長度計算,導致結果出現了問題。
2. 非嚴格相等比較。
使用array_unique函數時,需要注意它使用的是非嚴格相等比較,也就是說兩個值相等時,類型不同也會判定為相等。例如:
$oldArr = array('1', 1, true); $newArr = array_unique($oldArr); print_r($newArr);
輸出結果為:
Array ( [0] => 1 )
可以看到,1和’1’被判定為相等的,array_unique函數將其視為重複元素去掉了一個。
四、總結
array_unique函數是PHP中用於數組去重的重要函數之一。它不僅可以對普通數組進行去重,還可以對多維數組進行去重並保留重複元素的鍵名。但是在使用時,需要注意去重後數組下標的「重置」問題和使用非嚴格相等比較導致的重複元素漏判問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/181901.html