您的位置:

PHP array_unique函数:数组去重必备利器

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