在做二维数组处理的时候,会遇到数组中某些键值相同的情况,假如数据库设置了唯一键,那么就会导致入库失败,所以要根据指定的值去重。
下面是代码展示:
根据指定 name 和 email 两个键值去重
$data = [
['name' => '张三', 'email' => 'zhangsan@zh.com', 'source' => ''],
['name' => '张三', 'email' => 'zhangsan@zh.com', 'source' => ''],
['name' => '张三', 'email' => 'zhangsan@zh.com', 'source' => ''],
['name' => '李四', 'email' => 'zhangsan@zh.com', 'source' => ''],
['name' => '张三', 'email' => 'lisi@zh.com', 'source' => ''],
['name' => '张三', 'email' => 'lisi@zh.com', 'source' => ''],
['name' => '张三', 'email' => '王五@zh.com', 'source' => ''],
];
$res = [];
foreach ($data as $k => $v) {
$code = false;
foreach ($res as $vv) {
if ($vv['email'] == $v['email'] && $vv['name'] == $v['name']) {
$code = true;
break;
}
}
if (!$code) {
$res[] = $v;
}
}
打印出来是这样的:
array (
0 =>
array (
'name' => '张三',
'email' => 'zhangsan@zh.com',
'source' => '',
),
1 =>
array (
'name' => '李四',
'email' => 'zhangsan@zh.com',
'source' => '',
),
2 =>
array (
'name' => '张三',
'email' => 'lisi@zh.com',
'source' => '',
),
3 =>
array (
'name' => '张三',
'email' => '王五@zh.com',
'source' => '',
),
)
使用了双循环的方式去重,记录下,有时间再做优化和相关效率测试。
这个案例仅支持长度较小的二维数组去重,不然很容易就把CPU搞到100%;
怎么去重较大的二维数组,而且不占用太多CPU,效率还很高?
那么你点击查看这个文章:PHP 二维数组去重,针对较大的二维数组