如现在有这么一个数组:
$arr = [
0 => ['name'=>'小红','age'=>12,'sex'=>'男','phone'=>'123456213','qq'=>'456789',=>'wechat'=>'asda123'],
1 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789',=>'wechat'=>'asda123'],
2 => ['name'=>'小刚','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'1456789',=>'wechat'=>'asda123'],
3 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789',=>'wechat'=>'aza_asda123'],
4 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456123','qq'=>'08456789',=>'wechat'=>'asda123'],
5 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789',=>'wechat'=>'asda123'],
];要求是,我要去掉这个二维数组里,name值相同,且(phone或qq或wechat相同)的项,最后要求输出结果,并且同时将去掉的项放入一个新数组内并输出。重点是:可能这个$arr数组的长度最高可达十万条,太多的循环可能会导致速度很慢。所以还有什么比较好的方法呢
$arr = [
0 => ['name'=>'小红','age'=>12,'sex'=>'男','phone'=>'123456213','qq'=>'456789',=>'wechat'=>'asda123'],
1 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789',=>'wechat'=>'asda123'],
2 => ['name'=>'小刚','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'1456789',=>'wechat'=>'asda123'],
3 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789',=>'wechat'=>'aza_asda123'],
4 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456123','qq'=>'08456789',=>'wechat'=>'asda123'],
5 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789',=>'wechat'=>'asda123'],
];要求是,我要去掉这个二维数组里,name值相同,且(phone或qq或wechat相同)的项,最后要求输出结果,并且同时将去掉的项放入一个新数组内并输出。重点是:可能这个$arr数组的长度最高可达十万条,太多的循环可能会导致速度很慢。所以还有什么比较好的方法呢
0 => ['name'=>'小红','age'=>12,'sex'=>'男','phone'=>'123456213','qq'=>'456789','wechat'=>'asda123'],
1 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789','wechat'=>'asda123'],
2 => ['name'=>'小刚','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'1456789','wechat'=>'asda123'],
3 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789','wechat'=>'aza_asda123'],
4 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456123','qq'=>'08456789','wechat'=>'asda123'],
5 => ['name'=>'小明','age'=>12,'sex'=>'男','phone'=>'123456','qq'=>'456789','wechat'=>'asda123'],
];
$res = [];
$diff = [];
foreach($arr as $key=>$val) {
if(! $res) $res[$key] = $val;
else {
$flag = true;
foreach($res as $k=>$v) {
if($v['name'] == $val['name']) {
$t = array_intersect($v, $val);
if($t != $val) {
$diff[$key] = $val;
$flag = false;
break;
}
}
}
if($flag) $res[$key] = $val;
}
}
print_r($res);
print_r($diff);Array
(
[0] => Array
(
[name] => 小红
[age] => 12
[sex] => 男
[phone] => 123456213
[qq] => 456789
[wechat] => asda123
) [1] => Array
(
[name] => 小明
[age] => 12
[sex] => 男
[phone] => 123456
[qq] => 456789
[wechat] => asda123
) [2] => Array
(
[name] => 小刚
[age] => 12
[sex] => 男
[phone] => 123456
[qq] => 1456789
[wechat] => asda123
) [5] => Array
(
[name] => 小明
[age] => 12
[sex] => 男
[phone] => 123456
[qq] => 456789
[wechat] => asda123
))
Array
(
[3] => Array
(
[name] => 小明
[age] => 12
[sex] => 男
[phone] => 123456
[qq] => 456789
[wechat] => aza_asda123
) [4] => Array
(
[name] => 小明
[age] => 12
[sex] => 男
[phone] => 123456123
[qq] => 08456789
[wechat] => asda123
))