2个数组, 都有1个相同键, 如何合并才能最快

kis龍 2019-01-11 09:23:47
$a = [ ['name'=>'张三','date'=>'2018-12-12', ],['name'=>'李四','date'=>'2018-12-13',['name'=>'王五','date'=>'2018-12-16', ]];
$b = [ ['age'=>30,'date'=>'2018-12-12', ],['age'=>28,'date'=>'2018-12-13',['age'=>29,'date'=>'2018-12-15', ]];


2个数组根据date合并, 怎么才能最优, 最快, (date 是我group by 查询的结果, 不会有重复, 但是某个日期可能不存在)

我的方法是 先提取出来 $date=[] 到1个数组
$date = $a[date] + $b[date];// 合并 去重
$a 提取 $tmpa[date] = $a[][name];
$b 提取 $tmpb[date] = $a[][age];

然后遍历 $date 把 结果放到 结果数组,

请问 大佬们, 还有更好的办法吗?

这样需要foreach 好几次才行 !
...全文
691 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
kis龍 2019-02-21
  • 打赏
  • 举报
回复



$a = [
['name'=>'张三','date'=>'2018-12-12',],
['name'=>'李四','date'=>'2018-12-13',],
['name'=>'王五','date'=>'2018-12-16',]
];
$b = [
['age'=>30,'name'=>'张三',],
['age'=>28,'name'=>'李四',],
['age'=>29,'name'=>'刘六',]
];

$merge = array_merge($a,$b);//合并数据
echo '<pre>';var_export($merge);

$result= [];
foreach ($merge as $key => $info) {
$key =isset($info['date'])?'date':'age';
// $result[$info['name']][$key] = $info[$key];
if(!isset($result[$info['name']])){
$result[$info['name']] = [
'name'=>$info['name'],'age'=>'', 'date'=>''
];
}
$result[$info['name']][$key] = $info[$key];
// 楼上的 字段顺序不规律, 有的缺字段, 完善下,
}
echo '<pre>';
ksort($result);// 姓名排序
var_export($result);



这是最后改过 的(就差个 按日期排序了, 暂时不管了,看到帖子还没结, 来结贴了)
yt_php 2019-01-11
  • 打赏
  • 举报
回复

$merge = array_merge($a,$b);//合并数据

$result= array(); //result

 foreach ($merge as $key => $info) {
    
     $key =isset($info['name']) ?  'name' : 'age' ;
    
    $result[$info['date']][$key] = $info[$key];

 }

var_dump('<pre>',$result);
xuzuning 2019-01-11
  • 打赏
  • 举报
回复
两个都是不规则二维数组,不知道你期望得到什么样的结果

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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