插件窝 干货文章 PHP如何去除多维数组中的重复项

PHP如何去除多维数组中的重复项

array 数组 多维 name 933    来源:    2025-03-16

在PHP中,去除多维数组中的重复项可以通过多种方式实现。以下是一个常见的方法,使用 array_maparray_unique 函数来去除多维数组中的重复项。

示例代码

<?php
// 示例多维数组
$multiDimensionalArray = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 3, 'name' => 'Charlie'],
    ['id' => 2, 'name' => 'Bob'],
];

// 去除重复项
$uniqueArray = array_map("unserialize", array_unique(array_map("serialize", $multiDimensionalArray)));

// 输出结果
print_r($uniqueArray);
?>

解释

  1. array_map("serialize", $multiDimensionalArray): 将多维数组中的每个子数组序列化为字符串,这样可以使用 array_unique 来去除重复项。
  2. array_unique(...): 去除序列化后的数组中的重复项。
  3. array_map("unserialize", ...): 将去重后的序列化字符串数组反序列化回原始的多维数组结构。

输出结果

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

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

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

注意事项

  • 这种方法适用于数组中的元素是关联数组的情况。如果数组中的元素是索引数组,可能需要调整方法。
  • 如果数组中的元素是对象,这种方法可能不适用,因为对象的序列化和反序列化可能会导致对象状态的变化。

其他方法

如果你需要更复杂的去重逻辑(例如基于某个特定键去重),可以使用自定义函数来实现。例如:

<?php
function unique_multidim_array($array, $key) {
    $temp_array = array();
    $i = 0;
    $key_array = 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;
}

// 示例多维数组
$multiDimensionalArray = [
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 2, 'name' => 'Bob'],
    ['id' => 1, 'name' => 'Alice'],
    ['id' => 3, 'name' => 'Charlie'],
    ['id' => 2, 'name' => 'Bob'],
];

// 基于 'id' 键去重
$uniqueArray = unique_multidim_array($multiDimensionalArray, 'id');

// 输出结果
print_r($uniqueArray);
?>

输出结果

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

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

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

这种方法允许你基于数组中的某个特定键(如 id)来去重。