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

关于“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二维数组合并及去重复的方法

基础教程推荐