插件窝 干货文章 PHP数组去重在实际项目中如何使用

PHP数组去重在实际项目中如何使用

array name uniqueArray 数组 194    来源:    2025-03-16

在实际项目中,PHP数组去重是一个常见的需求,尤其是在处理数据时,确保数据的唯一性非常重要。以下是一些常见的场景和解决方案:

1. 简单数组去重

如果你有一个简单的索引数组,可以使用 array_unique() 函数来去除重复的值。

$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_column()array_values() 结合 array_unique() 来实现。

$array = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 3, 'name' => 'Charlie']
];

$uniqueArray = array_values(array_column($array, null, 'id'));
print_r($uniqueArray);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alice
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )

    [2] => Array
        (
            [id] => 3
            [name] => Charlie
        )
)

3. 多维数组去重

对于多维数组,你可能需要自定义去重逻辑。可以使用 array_map()serialize() 来去重。

$array = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 3, 'name' => 'Charlie']
];

$uniqueArray = array_map("unserialize", array_unique(array_map("serialize", $array)));
print_r($uniqueArray);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alice
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )

    [3] => Array
        (
            [id] => 3
            [name] => Charlie
        )
)

4. 使用自定义函数去重

如果你需要更复杂的去重逻辑,可以编写自定义函数。

function unique_multidimensional_array($array, $key) {
    $temp_array = [];
    $i = 0;
    $key_array = [];

    foreach($array as $val) {
        if (!in_array($val[$key], $key_array)) {
            $key_array[$i] = $val[$key];
            $temp_array[$i] = $val;
        }
        $i++;
    }
    return $temp_array;
}

$array = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 3, 'name' => 'Charlie']
];

$uniqueArray = unique_multidimensional_array($array, 'id');
print_r($uniqueArray);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alice
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )

    [3] => Array
        (
            [id] => 3
            [name] => Charlie
        )
)

5. 使用 array_reduce() 去重

array_reduce() 也可以用于去重,尤其是在处理复杂数据结构时。

$array = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 3, 'name' => 'Charlie']
];

$uniqueArray = array_reduce($array, function($carry, $item) {
    if (!in_array($item['id'], array_column($carry, 'id'))) {
        $carry[] = $item;
    }
    return $carry;
}, []);

print_r($uniqueArray);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => Alice
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )

    [2] => Array
        (
            [id] => 3
            [name] => Charlie
        )
)

总结

在实际项目中,数组去重的需求可能因数据结构的不同而有所变化。根据具体情况选择合适的去重方法,可以有效地提高代码的效率和可读性。