0

0

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

PHPz

PHPz

发布时间:2023-04-26 10:35:08

|

4697人浏览过

|

来源于php中文网

原创

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

方法一:使用array_unique函数

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

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

TextIn Tools
TextIn Tools

是一款免费在线OCR工具,包含文字识别、表格识别,PDF转文件,文件转PDF、其他格式转换,识别率高,体验好,免费。

下载
$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函数进行去重:

立即学习PHP免费学习笔记(深入)”;

$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速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

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

相关专题

更多
excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

20

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

65

2025.12.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2025.12.29

python中def的用法大全
python中def的用法大全

def关键字用于在Python中定义函数。其基本语法包括函数名、参数列表、文档字符串和返回值。使用def可以定义无参数、单参数、多参数、默认参数和可变参数的函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

python改成中文版教程大全
python改成中文版教程大全

Python界面可通过以下方法改为中文版:修改系统语言环境:更改系统语言为“中文(简体)”。使用 IDE 修改:在 PyCharm 等 IDE 中更改语言设置为“中文”。使用 IDLE 修改:在 IDLE 中修改语言为“Chinese”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

C++的Top K问题怎么解决
C++的Top K问题怎么解决

TopK问题可通过优先队列、partial_sort和nth_element解决:优先队列维护大小为K的堆,适合流式数据;partial_sort对前K个元素排序,适用于需有序结果且K较小的场景;nth_element基于快速选择,平均时间复杂度O(n),效率最高但不保证前K内部有序。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

12

2025.12.29

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

134

2025.12.29

抖音网页版入口在哪(最新版)
抖音网页版入口在哪(最新版)

抖音网页版可通过官网https://www.douyin.com进入,打开浏览器输入网址后,可选择扫码或账号登录,登录后同步移动端数据,未登录仅可浏览部分推荐内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

63

2025.12.29

快手直播回放在哪看教程
快手直播回放在哪看教程

快手直播回放需主播开启功能才可观看,主要通过三种路径查看:一是从“我”主页进入“关注”标签再进主播主页的“直播”分类;二是通过“历史记录”中的“直播”标签页找回;三是进入“个人信息查阅与下载”里的“直播回放”选项。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

18

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号