首页  >  文章  >  后端开发  >  php二维数组怎么去掉重复的值

php二维数组怎么去掉重复的值

PHPz
PHPz原创
2023-04-26 10:35:083251浏览

在PHP中,二维数组去重是一个比较常见的问题。当我们需要对一个包含多个维度的数组进行数据处理时,可能会遇到将某一维度的值进行整合的需求。这时候,如果有重复的值,就需要将其去重,以避免数据重复造成的问题。本文将介绍如何在PHP中去重二维数组。

方法一:使用array_unique函数

array_unique函数可用于除去数组中的重复值,并返回新数组。它的使用方法非常简单,只需要将要去重的数组传递给此函数即可。

例如,对于这样一个二维数组:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

我们使用array_unique函数进行去重:

$result = array_unique($arr, SORT_REGULAR);
print_r($result);

输出结果为:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [3] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,重复的元素已经被除去。

需要注意的是,array_unique默认是对数组的所有维度去重,如果我们只想去重其中一个维度,就需要进行一些特殊处理。

例如,如果我们只想通过name这一维度进行去重,可以使用如下方法:

//遍历二维数组,将name作为键名
foreach($arr as $value){
    $temp_arr[$value['name']] = $value;
}
//去重后,将数组重新按照数字索引重新排序
$temp_arr = array_values($temp_arr);
print_r($temp_arr);

输出结果为:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [2] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,我们通过将name作为键名,实现了只对name这一维度进行去重的效果。

方法二:使用array_reduce函数

另一个常用的去重方法是通过array_reduce函数实现。array_reduce函数可以对数组中的所有元素进行一次归约操作,最后返回一个标量值。我们可以利用此函数来去重二维数组。

例如,对于这样一个二维数组:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

我们使用array_reduce函数进行去重:

//定义一个回调函数,用于去重
function filter_duplicate($carry, $item){
    if(!in_array($item, $carry)){
        $carry[] = $item;
    }
    return $carry;
}

$result = array_reduce($arr, 'filter_duplicate', array());
print_r($result);

输出结果为:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [3] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,重复的元素已经被除去。

需要注意的是,array_reduce函数也会对数组所有维度进行去重,如果我们只想去重其中一个维度,就需要进行一些特殊处理,和使用array_unique函数相似。

方法三:使用循环遍历

还有一种常见的去重方法是使用循环遍历。这种方法较为复杂,但是可以充分利用PHP的数组相关函数,实现灵活的去重处理。我们可以通过在循环中使用in_array函数,或者通过对每一个元素进行哈希操作,将重复的元素排除。

例如,对于这样一个二维数组:

$arr = array(
    array('name' => 'John', 'age' => 20),
    array('name' => 'Mary', 'age' => 25),
    array('name' => 'John', 'age' => 20),
    array('name' => 'Peter', 'age' => 22),
    array('name' => 'Mary', 'age' => 25)
);

我们可以使用如下代码进行去重:

$new_arr = array();
foreach($arr as $value){
    $hash = md5(serialize($value)); //计算一个哈希值
    if(!isset($new_arr[$hash])){
        $new_arr[$hash] = $value; //新元素加入新数组
    }
}
$new_arr = array_values($new_arr); //将新数组重新按照数字索引重新排序
print_r($new_arr);

输出结果为:

Array
(
    [0] => Array
        (
            [name] => John
            [age] => 20
        )

    [1] => Array
        (
            [name] => Mary
            [age] => 25
        )

    [2] => Array
        (
            [name] => Peter
            [age] => 22
        )

)

可以看到,重复的元素已经被除去,并且新数组重新按照数字索引重新排序。

总结:

以上就是三种常见的去重方法,每一种方法都有其优劣之处,需要根据实际情况选择合适的方法。在处理二维数组时,我们应该遵循“简单高效”的原则,尽可能利用PHP提供的数组相关函数,减少代码复杂度和运行效率,提高程序性能。

以上是php二维数组怎么去掉重复的值的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn