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

关于“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使用preg_split和explode分割textarea存放内容的方法分析

    下面是关于“PHP使用preg_split和explode分割textarea存放内容的方法分析”的完整攻略: 目录 基本概念介绍 preg_split函数分割textarea内容 示例1:分割逗号分隔的内容 示例2:使用正则表达式分割内容 explode函数分割textarea内容 示例1:分割换行符分隔的内容 示例2:使用特定字符分割内容 总结 1. 基…

    PHP 2023年5月26日
    00
  • php中ob(Output Buffer 输出缓冲)函数使用方法

    当我们在PHP代码中输出内容时,这些内容会立即发送到服务器和客户端。然而使用PHP的输出缓冲功能可以将这些内容暂时保存起来,而不是马上发送。这样就可以在输出前对内容进行一些处理,比如可以修改、删除或添加内容。 PHP中使用输出缓冲时,可以使用ob系列函数来实现。其中常用的两个函数是ob_start()和ob_end_flush()。 ob_start() o…

    PHP 2023年5月26日
    00
  • PHP回调函数与匿名函数实例详解

    PHP回调函数与匿名函数实例详解 在PHP中,回调函数和匿名函数(闭包)是非常有用的编程概念。回调函数是指在调用函数时作为参数传递给另一个函数的函数,而匿名函数则是在运行时定义的没有指定名称的函数。这两个概念在解决许多编程问题上都非常有用,本文将详细介绍这两个概念的用法。 回调函数 回调函数是将一个函数传递给另一个函数,并将其作为参数使用的函数。这使得代码可…

    PHP 2023年5月25日
    00
  • php str_pad 函数使用详解

    PHP str_pad 函数使用详解 str_pad() 函数是 PHP 中一个用于字符串填充的函数。本文将介绍 str_pad() 函数的用法和示例,帮助你理解和使用该函数。 语法说明 str_pad() 函数的语法如下: str_pad(string $str, int $length, string $padstr = " ", i…

    PHP 2023年5月26日
    00
  • PHP实现查询两个数组中不同元素的方法

    要求查询两个数组中的不同元素,有以下两种方法: 方法一:使用array_diff函数 可以使用PHP内置函数array_diff()来获取两个数组中不同的元素。该函数接受多个数组作为参数,返回一个包含所有与其他数组不同的元素的新数组。 $array1 = array(‘a’, ‘b’, ‘c’, ‘d’, ‘e’); $array2 = array(‘b’,…

    PHP 2023年5月26日
    00
  • php方法调用模式与函数调用模式简例

    PHP方法调用模式与函数调用模式简例 在PHP中,我们可以使用方法调用模式和函数调用模式来执行函数和方法。 函数调用模式 函数调用模式是指直接调用函数,以函数名为开头,后接括号,括号中为传递给函数的参数。函数调用模式可以在任何地方调用函数,例如: function add_numbers($x, $y) { return $x + $y; } $result…

    PHP 2023年5月27日
    00
  • php打开远程文件的方法和风险及解决方法

    PHP打开远程文件的方法和风险及解决方法 在PHP中,我们可以通过多种方式来打开远程文件,如file_get_contents, fopen, curl等,但同时也需要注意到,打开远程文件的过程中存在一些安全风险,本文将详细讲解如何使用这些方法以及如何避免安全风险。 1. 使用file_get_contents函数打开远程文件 $content = file…

    PHP 2023年5月26日
    00
  • PHP实现的创建带logo图标二维码生成类详解

    PHP实现的创建带logo图标二维码生成类详解 简介 二维码(QR Code)是应用于电子设备中的一种条码。它以矩阵和黑白两色的方式来记录数据信息,具有信息容量大、安全性高、易于读取等特点,是目前应用非常广泛的一种图形码。本文介绍了在PHP中创建带logo图标的二维码生成类的实现方法,可以用于实现在网站中生成二维码并带有自定义logo。 实现步骤 1. 导入…

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