插件窝 干货文章 PHP数组去重有哪些优化技巧

PHP数组去重有哪些优化技巧

array 数组 uniqueArray 使用 615    来源:    2025-03-16

在PHP中,数组去重是一个常见的操作。为了提高性能并优化代码,可以采用以下几种技巧:

1. 使用 array_unique 函数

array_unique 是PHP内置的函数,用于去除数组中的重复值。它是最简单直接的方法,但对于大数组来说,性能可能不是最优的。

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

2. 使用 array_flip 函数

array_flip 可以将数组的键和值交换。由于数组的键是唯一的,这种方法可以快速去重。

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

3. 使用 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;
}, []);

4. 使用 array_count_values 函数

array_count_values 可以统计数组中每个值的出现次数,然后通过 array_keys 获取唯一值。

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

5. 使用 SplFixedArraySplObjectStorage

对于非常大的数组,可以考虑使用 SplFixedArraySplObjectStorage 来提高性能。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = [];
$temp = new SplFixedArray(count($array));

foreach ($array as $value) {
    $temp[$value] = true;
}

foreach ($temp as $key => $value) {
    if ($value) {
        $uniqueArray[] = $key;
    }
}

6. 使用 array_filterin_array

结合 array_filterin_array 可以实现自定义的去重逻辑。

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

7. 使用 array_maparray_unique

结合 array_maparray_unique 可以在处理多维数组时去重。

$array = [[1, 2], [2, 3], [1, 2]];
$uniqueArray = array_map("unserialize", array_unique(array_map("serialize", $array)));

8. 使用 array_values 重新索引

在使用 array_unique 后,数组的键可能会变得不连续,可以使用 array_values 重新索引数组。

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

9. 使用 array_mergearray_unique

对于多个数组合并后去重,可以使用 array_mergearray_unique

$array1 = [1, 2, 3];
$array2 = [2, 3, 4];
$uniqueArray = array_unique(array_merge($array1, $array2));

10. 使用 array_reducearray_search

结合 array_reducearray_search 可以实现更复杂的去重逻辑。

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

总结

  • array_unique:简单直接,适合小数组。
  • array_flip:性能较好,适合大数组。
  • array_reduce:灵活,适合复杂逻辑。
  • array_count_values:统计频率后去重。
  • SplFixedArray:适合非常大的数组。
  • array_filterin_array:自定义去重逻辑。
  • array_maparray_unique:适合多维数组。
  • array_values:重新索引数组。
  • array_mergearray_unique:合并后去重。
  • array_reducearray_search:复杂去重逻辑。

根据具体场景选择合适的去重方法,可以有效提高代码的性能和可读性。