关于“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技术站