如现在有这么一个数组:
$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数组的长度最高可达十万条,太多的循环可能会导致速度很慢。所以还有什么比较好的方法呢

解决方案 »

  1.   

    用 php 可以这样写$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
            ))
      

  2.   

    用数据库处理比较方便,用php数组处理效率低了。
      

  3.   

    用应用程序操作,效率会高很多。php就算了吧。