PHP实现多维数组中同一userid的登录日期合并
合并多维数组中相同userid的条目,整合lastlogindate为数组
可以通过遍历原数组,以userid为临时键快速分组,最终转换为目标格式,具体实现代码如下:
<?php $data = [ [ "_id" => "6318956768e7df9342bc8349", "userid" => "test1234AB", "lastlogindate" => "2022-10-31T12:21:23.000000Z", ], [ "_id" => "6318956768e7df9342bc8350", "userid" => "test123456", "lastlogindate" => "2022-08-31T12:21:23.000000Z", ], [ "_id" => "63357dfd5435bcdfae485685", "userid" => "test1234AB", "lastlogindate" => "2022-12-31T12:21:23.000000Z", ], [ "_id" => "63357dfd5435bcdfae98316", "userid" => "xyz123", "lastlogindate" => "2022-12-31T12:21:23.000000Z", ] ]; $temp = []; foreach ($data as $item) { $userid = $item['userid']; // 首次遇到该userid,初始化条目并将lastlogindate转为数组 if (!isset($temp[$userid])) { $temp[$userid] = [ '_id' => $item['_id'], 'userid' => $userid, 'lastlogindate' => [$item['lastlogindate']] ]; } else { // 已存在该userid,追加登录日期到数组 $temp[$userid]['lastlogindate'][] = $item['lastlogindate']; } } // 将关联数组转为索引数组,匹配期望输出结构 $result = array_values($temp); // 打印验证结果 echo '<pre>'; print_r($result); echo '</pre>'; ?>
代码说明
- 用
userid作为临时数组的键,遍历过程中可快速判断用户是否已被处理,时间复杂度为O(n),效率较高 - 首次处理新
userid时,将lastlogindate初始化为包含当前日期的数组 - 遇到重复
userid时,直接追加对应日期到数组中 - 最后通过
array_values()将关联数组转为索引数组,得到目标格式
内容的提问来源于stack exchange,提问作者gooddev
相关产品推荐
相关产品推荐

