首页 > 后端开发 > PHP问题 > php怎么删除二维数组重复值

php怎么删除二维数组重复值

PHPz
发布: 2023-04-19 10:01:47
原创
647 人浏览过

在 PHP 中,我们经常需要处理数组,其中一个常见的问题是如何删除二维数组中的重复值。这个问题并不难解决,我们可以使用 PHP 提供的一些数组函数,比如array_maparray_uniquearray_filter 等等。下面,就让我们来了解一下如何实现删除二维数组重复值的方法。

什么是二维数组?

二维数组是指一个数组中的元素也是一个数组,它可以表示为一个矩阵。在 PHP 中,我们可以使用以下方式创建一个二维数组:

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18)
);
登录后复制

上面的代码中,我们创建了一个 $students 数组,其中每个元素也是一个数组,包含 nameage 两个键值对。这个数组可以理解为一个学生信息的表格。

删除重复值的方法

接下来,我们介绍若干种删除二维数组重复值的方法:

方法一:使用 foreach 循环

function remove_duplicate_by_foreach($arr){
    $result = array();//定义一个新数组,用来存放去重后的数据
    foreach($arr as $key => $value){
        $flag = false;
        foreach($result as $val){
            if($value == $val){
                $flag = true;
                break;
            }
        }
        if(!$flag){ //如果数据不重复,则将其添加到新数组中
            array_push($result, $value);
        }
    }
    return $result;
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_foreach($students));
登录后复制

上面的代码中,我们首先定义了一个空的 $result 数组,然后使用两个 foreach 循环遍历原数组 $arr,对于其中的每个元素 $value,在 $result 数组中查找是否存在相同的元素,如果不存在,则将其添加到 $result 数组中。

这种方法比较简单易懂,但是效率比较低,尤其是当数据较多时,遍历的时间会变得很长。

方法二:使用 array_map 和 array_unique 函数

function remove_duplicate_by_array_map($arr){
    $temp = array_map("serialize", $arr);//将数组中的每个元素都序列化
    $result = array_unique($temp);//去重操作
    $new_array = array();
    foreach ($result as $value) {//反序列化操作
        array_push($new_array, unserialize($value));
    }
    return $new_array;
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_array_map($students));
登录后复制

上面的代码中,我们先使用 array_map 函数将原数组 $arr 中的每个元素都序列化成字符串,然后使用 array_unique 函数对序列化后的字符串进行去重操作,最后再使用 foreach 循环反序列化成正常的数组元素。

这种方法相比于方法一,效率稍高一些,但是序列化和反序列化的过程可能会影响性能。

方法三:使用 array_filter 函数

function remove_duplicate_by_array_filter($arr){
    $unique_arr = array_unique(array_map('serialize',$arr));//先将数组序列化再去重
    return array_filter($unique_arr, function($var){//回调函数进行反序列化
        return unserialize($var);
    });
}

$students = array(
    array('name' => '张三', 'age' => 18),
    array('name' => '李四', 'age' => 20),
    array('name' => '王五', 'age' => 22),
    array('name' => '赵六', 'age' => 18),
    array('name' => '张三', 'age' => 18)
);
print_r(remove_duplicate_by_array_filter($students));
登录后复制

上面的代码中,我们先使用 array_map 函数将原数组 $arr 中的每个元素都序列化成字符串,然后使用 array_unique 函数对序列化后的字符串进行去重操作,最后再使用 array_filter 函数实现反序列化操作。

这种方法相比于前两种方法,代码量更少,效率也更高。

总结

在 PHP 中,删除二维数组中的重复值并不难,可以使用 array_maparray_uniquearray_filter 等函数进行实现。根据需要选择不同的方法,以达到更高效的处理结果。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板