PHP 二维数组按指定值去重

 2019-06-03 11:16:38   {{zan}}   132 

在做二维数组处理的时候,会遇到数组中某些键值相同的情况,假如数据库设置了唯一键,那么就会导致入库失败,所以要根据指定的值去重。

下面是代码展示:

根据指定 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' => '',
  ),
)

使用了双循环的方式去重,记录下,有时间再做优化和相关效率测试。


欢迎指导!

提交 清空 1楼: 第一次循环$res为空,不报错么
2019-08-06 15:29