php二维数组合并及去重复的方法

yizhihongxing

关于“PHP二维数组合并及去重复的方法”的问题,我可以给你提供以下的攻略。

什么是二维数组

在 PHP 中,二维数组是一个包含多个数组的数组,每个子数组可以包含一个或多个元素。二维数组主要使用“数组名[下标1][下标2]”这种方式访问。

例如:

$array = array( 
        array("name","age","sex"), 
        array("Tom","20","male"), 
        array("Jerry","21","male"), 
        array("Lisa","19","female") 
        );

以上例子中,$array 是一个二维数组,包含 4 个子数组。

接下来我们针对二维数组合并和去重复问题进行说明。

合并二维数组

PHP 中的 array_merge() 函数可以用于合并两个或多个数组。例如,我们有两个数据:

$A = array(
    array('id'=>1,'name'=>'张三'),
    array('id'=>2,'name'=>'李四'),
);
$B = array(
    array('id'=>3,'name'=>'王五'),
    array('id'=>2,'name'=>'李四'),
);

如果我们想把 $B 中的内容合并到 $A 中,可以这么写:

$mergeArr = array_merge($A, $B);

结果会变为:

array(
    array('id'=>1,'name'=>'张三'),
    array('id'=>2,'name'=>'李四'),
    array('id'=>3,'name'=>'王五'),
    array('id'=>2,'name'=>'李四'),
)

从结果来看,虽然 $B 中的二维数组与 $A 中的一个二维数组重复了,但却没有被去重。如果我们想要去重,就需要使用 array_unique() 函数进行去重。

去重二维数组

为了让二维数组去重,需要先对二维数组中的每个子数组进行排序。上面的例子中,我们要对它们按照 id 字段进行排序,可以这样写:

// 对数组 $mergeArr 的 id 字段排重
$idList = array_unique(array_column($mergeArr, 'id'));

foreach ($mergeArr as $key => $value) {
    $existKey = array_search($value['id'], $idList);
    if (is_numeric($existKey) && $existKey != $key) {
        unset($mergeArr[$key]);
    }
}

// 对数组 $mergeArr 的其他字段去重
$mergeArr = array_map("unserialize", array_unique(array_map("serialize", $mergeArr)));

这样,$mergeArr 数组就变成了这样:

array(
    array('id'=>1,'name'=>'张三'),
    array('id'=>2,'name'=>'李四'),
    array('id'=>3,'name'=>'王五'),
)

充分体现了去重的效果。

示例说明

示例一: 合并两个二维数组,并去掉重复的数组。

<?php
$A = array(
    array('id'=>1,'name'=>'张三'),
    array('id'=>2,'name'=>'李四'),
);
$B = array(
    array('id'=>3,'name'=>'王五'),
    array('id'=>2,'name'=>'李四'),
);

$mergeArr = array_merge($A, $B);

$idList = array_unique(array_column($mergeArr, 'id'));

foreach ($mergeArr as $key => $value) {
    $existKey = array_search($value['id'], $idList);
    if (is_numeric($existKey) && $existKey != $key) {
        unset($mergeArr[$key]);
    }
}

$mergeArr = array_map("unserialize", array_unique(array_map("serialize", $mergeArr)));

print_r($mergeArr);
?>

输出结果:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 张三
        )

    [1] => Array
        (
            [id] => 2
            [name] => 李四
        )

    [2] => Array
        (
            [id] => 3
            [name] => 王五
        )
)

以上结果中,去掉了二维数组中的重复元素。

示例二: 给一个二维数组按照其中的某一个字段去重。

<?php
$array = array( 
    array('id'=>1,'name'=>'张三'), 
    array('id'=>2,'name'=>'李四'),
    array('id'=>3,'name'=>'张三') 
);

$idList = array_unique(array_column($array, 'id'));

foreach ($array as $key => $value) {
    $existKey = array_search($value['id'], $idList);
    if (is_numeric($existKey) && $existKey != $key) {
        unset($array[$key]);
    }
}

$array = array_map("unserialize", array_unique(array_map("serialize", $array)));

print_r($array);
?>

输出结果:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 张三
        )

    [1] => Array
        (
            [id] => 2
            [name] => 李四
        )
)

以上结果中,根据数组中的 id 字段完成了去重的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php二维数组合并及去重复的方法 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP实现长轮询消息实时推送功能代码实例讲解

    一、长轮询是什么? 长轮询(Long-Polling)是一种服务器推送技术,可以在没有使用websocket的情况下,在客户端和服务器进行实时通信,使得浏览器可以像类似于事件驱动的方式获取服务端的实时数据。客户端向服务器请求获取数据时,服务器不会立即返回响应,而是会一直保持连接处于等待状态,直到有数据可以返回给客户端或者超时。 二、PHP实现长轮询的基本原理…

    PHP 2023年5月27日
    00
  • php使用for语句输出三角形的方法

    以下是PHP使用for语句输出三角形的完整攻略: 1. for语句 for语句是PHP中的循环语句之一,可以让代码块重复执行多次。for语句由三个部分组成: for (初始化表达式; 条件表达式; 递增表达式) { /* 循环体 */ } 其中,初始化表达式在循环开始前执行一次,通常用于定义循环计数器的初始值;条件表达式在每次循环开始前进行判断,如果为真则执…

    PHP 2023年5月26日
    00
  • PHP快速推送微信模板消息

    接下来我将为您详细讲解“PHP快速推送微信模板消息”的完整攻略。 概述 在进行快速推送微信模板消息之前,我们需要先了解微信公众号开发的基本流程。公众号开发主要分为三个步骤,分别是注册公众号、接入微信服务器和消息与事件处理。在这三个步骤中,我们需要获取access_token并创建模板消息。而PHP作为一门强大的后端语言,在这个过程中可以大大方便我们的操作。下…

    PHP 2023年5月27日
    00
  • PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br

    让我来为你详细讲解PHP字符串函数系列之nl2br()的使用方法。 函数说明 nl2br() 函数在字符串中的每个新行(\n)之前插入 HTML 换行符 <br>。该函数返回被转换后的字符串。 语法 nl2br(string $string, bool $is_xhtml = true): string 参数说明: $string:必需,要进行转…

    PHP 2023年5月26日
    00
  • [php] 我的微型论坛的简单教程[已完成]

    [PHP] 我的微型论坛的简单教程[已完成] 概述 本教程主要介绍如何使用PHP语言创建一个简单的微型论坛,包括用户注册、登录、发布帖子、回复帖子等功能。 前提条件 在开始本教程前,你需要具备以下基础知识: PHP语言基础知识 MySQL数据库基础知识 技术架构 本微型论坛使用以下技术进行实现: 服务器端语言:PHP 数据库:MySQL 前端框架:Boots…

    PHP 2023年5月24日
    00
  • PHP下escape解码函数的实现方法

    PHP下escape解码函数的实现方法 什么是escape编码? escape编码是指将字符串中的某些字符转换为以“%”符号表示的十六进制ASCII值,并在前面加上“%”符号。这种编码方法常用于URL参数传递、HTML的attribute和某些邮箱协议。 例如,对于字符串“ hello world !”,如果使用escape编码,就会得到“%20hello%…

    PHP 2023年5月27日
    00
  • PHP自动载入类文件函数__autoload的使用方法

    当我们在PHP中使用类时,需要提前把该类所在的文件引入到脚本中,否则会导致提示类未定义。如果我们有多个类需要引入,这个过程可能非常复杂,也容易出错。为了解决这个问题,我们可以使用PHP的自动载入类文件函数__autoload。 __autoload函数的概述 __autoload函数,是PHP 5引入的一个内置函数,主要用于在调用类之前自动引入该类所在的文件…

    PHP 2023年5月26日
    00
  • PHP超级全局变量数组小结

    PHP超级全局变量是指能在全局范围内访问的特殊变量数组,其中包括多个变量,以下是它们的摘要: $_SERVER – 包含了诸如头文件、路径和脚本位置之类的信息。下面是一个使用$_SERVER的例子: <?php echo ‘当前的脚本名称: ‘.$_SERVER[‘SCRIPT_NAME’]; ?> $_GET – 包含通过 HTTP GET 方…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部