PHP array_unique函数:数组去重必备工具
在PHP中,数组是最常用的数据类型之一。在进行数组操作时,我们经常会遇到需要从数组中删除重复元素的情况。这时候PHP中的array_unique函数就变得非常重要了。
1。 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 数组中的重复元素已被删除。
2。 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 数组中的重复元素被删除,保留了重复元素的键名。
3。 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 函数将它们视为重复元素并删除一个。
4。总结
array_unique函数是PHP中用于数组去重的重要函数之一。它不仅可以对普通数组进行去重,还可以对多维数组进行去重,并保留重复元素的键名。但如果使用的话,需要注意去重后数组订阅的“重置”问题以及使用非严格相等比较导致的重复元素丢失的问题。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网