插件窝 干货文章 PHP数组去重还能使用哪些函数

PHP数组去重还能使用哪些函数

array uniqueArray 数组 可以 275    来源:    2025-03-16

在PHP中,除了使用array_unique()函数来去除数组中的重复值外,还可以使用其他一些方法来实现数组去重。以下是一些常用的方法:

1. array_flip() + array_keys()

array_flip()函数可以将数组的键和值互换,因为数组的键是唯一的,所以重复的值会被自动去除。然后再使用array_keys()将键转换回值。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_keys(array_flip($array));
print_r($uniqueArray);

2. array_reduce()

array_reduce()函数可以将数组中的元素通过回调函数逐个处理,最终返回一个单一的值。你可以利用这个函数来手动去重。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_reduce($array, function($carry, $item) {
    if (!in_array($item, $carry)) {
        $carry[] = $item;
    }
    return $carry;
}, []);
print_r($uniqueArray);

3. array_count_values() + array_keys()

array_count_values()函数可以统计数组中每个值出现的次数,返回一个关联数组,键是数组的值,值是出现的次数。然后你可以使用array_keys()来获取去重后的数组。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_keys(array_count_values($array));
print_r($uniqueArray);

4. 使用foreach循环手动去重

你可以使用foreach循环遍历数组,并将不重复的值存储到一个新数组中。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = [];
foreach ($array as $value) {
    if (!in_array($value, $uniqueArray)) {
        $uniqueArray[] = $value;
    }
}
print_r($uniqueArray);

5. 使用array_filter()in_array()

array_filter()函数可以过滤数组中的元素,结合in_array()函数可以实现去重。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = [];
array_filter($array, function($value) use (&$uniqueArray) {
    if (!in_array($value, $uniqueArray)) {
        $uniqueArray[] = $value;
    }
});
print_r($uniqueArray);

6. 使用array_values() + array_unique()

array_unique()函数去重后,数组的键可能会不连续,可以使用array_values()重新索引数组。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_values(array_unique($array));
print_r($uniqueArray);

7. 使用SplFixedArray(适用于大型数组)

对于非常大的数组,SplFixedArray可能比普通数组更高效。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = [];
$tempArray = new SplFixedArray(count($array));
foreach ($array as $value) {
    $tempArray[$value] = true;
}
foreach ($tempArray as $key => $value) {
    if ($value) {
        $uniqueArray[] = $key;
    }
}
print_r($uniqueArray);

总结

  • array_unique()是最常用的去重方法,简单直接。
  • array_flip() + array_keys()适用于值可以作为键的情况。
  • array_reduce()foreach循环适合需要自定义去重逻辑的场景。
  • array_count_values() + array_keys()适用于需要统计值出现次数的场景。

根据具体的需求和数组的大小,可以选择最适合的方法。