插件窝 干货文章 PHP数组去重复有哪些方法

PHP数组去重复有哪些方法

array uniqueArray 数组 函数 939    来源:    2025-03-16

在PHP中,数组去重有多种方法,具体选择哪种方法取决于你的需求和数组的结构。以下是几种常见的去重方法:

1. 使用 array_unique() 函数

array_unique() 是PHP内置的函数,用于去除数组中的重复值。它会保留第一个出现的值,并移除后续的重复值。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_unique($array);
print_r($uniqueArray);
// 输出: Array ( [0] => 1 [1] => 2 [3] => 3 [4] => 4 [6] => 5 )

2. 使用 array_flip() 函数

array_flip() 函数可以将数组的键和值互换。由于数组的键是唯一的,因此可以通过这种方式去除重复值。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_flip(array_flip($array));
print_r($uniqueArray);
// 输出: Array ( [0] => 1 [1] => 2 [3] => 3 [4] => 4 [6] => 5 )

3. 使用 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);
// 输出: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )

4. 使用 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);
// 输出: Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )

5. 使用 array_keys()array_flip() 结合

如果你有一个关联数组,并且希望根据键去重,可以使用 array_keys()array_flip() 结合。

$array = ['a' => 1, 'b' => 2, 'c' => 2, 'd' => 3];
$uniqueArray = array_keys(array_flip($array));
print_r($uniqueArray);
// 输出: Array ( [0] => 1 [1] => 2 [2] => 3 )

6. 使用 array_filter() 函数

array_filter() 函数可以通过自定义回调函数来过滤数组中的元素。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_filter($array, function($value, $key) use ($array) {
    return array_search($value, $array) === $key;
}, ARRAY_FILTER_USE_BOTH);
print_r($uniqueArray);
// 输出: Array ( [0] => 1 [1] => 2 [3] => 3 [4] => 4 [6] => 5 )

7. 使用 array_map()array_unique() 结合

如果你需要对数组中的每个元素进行处理后再去重,可以使用 array_map()array_unique() 结合。

$array = [1, 2, 2, 3, 4, 4, 5];
$uniqueArray = array_unique(array_map(function($item) {
    return $item; // 这里可以对每个元素进行处理
}, $array));
print_r($uniqueArray);
// 输出: Array ( [0] => 1 [1] => 2 [3] => 3 [4] => 4 [6] => 5 )

总结

  • array_unique() 是最简单直接的方法,适用于大多数场景。
  • array_flip() 适用于需要快速去重且不关心键值的情况。
  • array_reduce()array_filter() 提供了更多的灵活性,适用于需要自定义去重逻辑的场景。

根据你的具体需求选择合适的方法即可。