在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中用于数组去重的重要函数之一。它不仅可以对普通数组进行去重,还可以对多维数组进行去重并保留重复元素的键名。但是在使用时,需要注意去重后数组下标的“重置”问题和使用非严格相等比较导致的重复元素漏判问题。