PHP比较二维数组,求大神赐教

查看:71
本文介绍了PHP比较二维数组,求大神赐教的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

一个参与活动名单的二维数组
$arr1=array(
array('name'=>'张三','phone'=>'1354459845','address'=>'一街5号'),
array('name'=>'李四','phone'=>'1323439845','address'=>'一街3号'),
array('name'=>'陈五','phone'=>'1354353145','address'=>'一街2号'),
);

一个历史中奖名单的二维数组
$arr2=array(
array('name'=>'mary','phone'=>'1313598445','address'=>'一街8号'),
array('name'=>'jhon','phone'=>'1323298425','address'=>'一街9号'),
array('name'=>'陈五','phone'=>'1353dsad45','address'=>'一街10号'),
);
现在要比较这两个数组,只要名称name或phone或address其中一个在历史名单中出现过,就要把他从arr1参与活动名单中去掉。
除了两次foreach再比较以外,有什么好的方法可以快速地得出筛选后的活动名单结果。两份名单都至少几千,如果用两次foreach的话速度会很慢

解决方案

$arr = [
    ["name" => "李四", "phone" => '5555', "address" => 'aaa' ],
    ["name" => "张三", "phone" => '6666', "address" => 'bbb' ],
    ["name" => "老王", "phone" => '7777', "address" => 'ccc' ],
];
$filter = [
    ["name" => "李四", "phone" => '3333', "address" => 'xyz' ],
    ["name" => "王三", "phone" => '6666', "address" => 'xyz' ],
];

$arr = array_filter($arr, function($i) use ($filter) {
    return !in_array($i['name'], array_column($filter, 'name')) && !in_array($i['phone'], array_column($filter, 'phone'));
});
var_dump($arr);

这篇关于PHP比较二维数组,求大神赐教的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆