在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
微信掃一掃
支付寶掃一掃