一个PHP的数组问题,困扰了我很久,还请各位高人指点?

泽丶丶丶丶丶丶 2018-03-02 09:26:35
如现在有这么一个数组:
$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数组的长度最高可达十万条,太多的循环可能会导致速度很慢。所以还有什么比较好的方法呢
...全文
780 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
桃子草莓 2018-03-06
  • 打赏
  • 举报
回复
推荐使用数据库吧,毕竟你说的数据那么多,还是数据库好点
newpeng 2018-03-05
  • 打赏
  • 举报
回复
用应用程序操作,效率会高很多。php就算了吧。
傲雪星枫 2018-03-04
  • 打赏
  • 举报
回复
按你的条件,最后应该只有小红,小刚的记录保留。
傲雪星枫 2018-03-04
  • 打赏
  • 举报
回复
用数据库处理比较方便,用php数组处理效率低了。
xuzuning 2018-03-03
  • 打赏
  • 举报
回复
用 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
        )

)
xuzuning 2018-03-02
  • 打赏
  • 举报
回复
放到数据库里去做关联查询 况且可达十万条的话,你也不可能一行行的写在程序文件里

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧