📜  如何在php中从多维数组中删除重复值(1)

📅  最后修改于: 2023-12-03 15:08:55.920000             🧑  作者: Mango

如何在 PHP 中从多维数组中删除重复值

在 PHP 中,如果你需要从多维数组中删除重复的值,可以使用 array_unique() 函数来解决。然而,这个函数只能用于一维数组,对于多维数组并不适用。

下面提供几种实现方式来从多维数组中删除重复值:

方法一:使用递归函数

可以使用递归函数来遍历每个子数组,使用 array_unique() 函数去重。

function unique_multidim_array($array, $key) {
    $temp_array = array();
    foreach($array as $val) {
        if(!isset($temp_array[$val[$key]])) {
            $temp_array[$val[$key]] = $val;
        }
    }
    return array_values($temp_array);
}

// 使用
$array = array(
    array('id' => '1', 'name' => 'foo'),
    array('id' => '2', 'name' => 'bar'),
    array('id' => '1', 'name' => 'foo'),
    array('id' => '3', 'name' => 'baz')
);
$array = unique_multidim_array($array, 'id');
方法二:使用数组排序和比较

按照指定的键名进行排序,然后使用两个指针逐个比较。如果两个子数组的键值相等,则将后面的子数组删除。

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;
}

// 使用
$array = array(
    array('id' => '1', 'name' => 'foo'),
    array('id' => '2', 'name' => 'bar'),
    array('id' => '1', 'name' => 'foo'),
    array('id' => '3', 'name' => 'baz')
);
$array = unique_multidim_array($array, 'id');
方法三:使用 array_reduce 函数

使用 array_reduce() 函数和 array_replace_recursive() 函数来删除重复的子数组。

function unique_multidim_array($array, $key) {
    $result = array_reduce($array, function($carry, $item) use($key) {
        return !isset($carry[$item[$key]]) ? ($carry[$item[$key]] = $item) && $carry : array_replace_recursive($carry, [$item[$key] => $item]);
    }, []);
    return $result;
}

// 使用
$array = array(
    array('id' => '1', 'name' => 'foo'),
    array('id' => '2', 'name' => 'bar'),
    array('id' => '1', 'name' => 'foo'),
    array('id' => '3', 'name' => 'baz')
);
$array = unique_multidim_array($array, 'id');

这里介绍了三种方法来从多维数组中删除重复值,可以根据实际需求选择合适的方式。