插件窝 干货文章 php的数组去重有几种方法

php的数组去重有几种方法

array uniqueArray 数组 函数 651    来源:    2025-03-18

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

7. 使用 array_filter() 函数

array_filter() 函数可以结合自定义回调函数来去重。

$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;
});
print_r($uniqueArray);
// 输出: Array ( [0] => 1 [1] => 2 [3] => 3 [4] => 4 [6] => 5 )

总结

  • array_unique() 是最简单直接的方法,适用于大多数情况。
  • array_flip() 适用于需要快速去重且不关心键的情况。
  • array_reduce()foreach 循环适用于需要自定义去重逻辑的情况。
  • array_filter() 适用于需要结合其他逻辑进行去重的情况。

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