一个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数组的长度最高可达十万条,太多的循环可能会导致速度很慢。所以还有什么比较好的方法呢
...全文
814 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
  • 打赏
  • 举报
回复
放到数据库里去做关联查询 况且可达十万条的话,你也不可能一行行的写在程序文件里
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...

21,889

社区成员

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

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