如何解决laravel 数组 groupBy 特定列值
我在 laravel 中处理数组,结果如下:
$datesArr = [ {
"day": "monday","date": "2021-05-03"
},{
"day": "monday","date": "2021-05-10"
},"date": "2021-05-17"
}
]
我想要的是这个:
{
"day": "monday","dates" : [
{"date": "2021-05-03"},{"date": "2021-05-10"},{"date": "2021-05-17"},]
}
解决方法
希望能帮到你(应该全部转成数组)
public static function buildArrayGroupBy($key,$data,$lockKey = null) {
$result = array();
foreach($data as $val) {
if(array_key_exists($key,$val)){
if(!is_null($lockKey)){
$result[$val[$key]][] = $val[$lockKey];
}else{
$result[$val[$key]][] = $val;
}
}else{
$result[""][] = $val;
}
}
return $result;
}
,
您可以使用 Laravel Collection 的 groupBy 函数。
输出将采用以下格式,但它会完成工作。
$datesArr = [
"monday" => [
{
"day": "monday","date": "2021-05-03"
},{
"day": "monday","date": "2021-05-10"
},"date": "2021-05-17"
}
]
]
对于上述的精确输出,您可以使用 mapToGroups。
$data->mapToGroups(function($i) {
return ['day' => $i['day'],'dates' => [
'date' => $i['date']
]];
});
P.S:您可能需要根据您的要求对其进行一些更改。
,感谢所有试图帮助我的人。我想到了如何解决它。 我将在这里尝试解释。 首先,我得到了我存储的所有天数。然后:
$daysArr = array();
foreach($days as $key => $day){
$datesArr = array();
for($i = 0;$i< 8;$i++){
$newDate['date'] = now()->next($key)->addWeeks($i)->toDateString();
array_push($datesArr,$newDate);
}
$test['day'] = $key;
$test['dates'] = $datesArr;
array_push($daysArr,$test);
unset($datesArr);
}
return $daysArr;
我做了双 array_push 和 foreach "new day" ,我取消了 $datesArr 的设置以获得空数组来推送 "new day" 的新日期。 希望我说得够清楚了!
,让我们根据您的要求生成一些虚拟数据:
foreach(range(1,100) as $rangeTbs){
$carbon = \Carbon\Carbon::now()
->addDays(rand(1,20))
->addMonths(rand(1,2));
$dateArrayTbs[] = [
'day' => $carbon->format('l'),'date' => $carbon->format('Y-m-d'),];
}
现在我们可以将数组转换为集合:
$collection = collect($dateArrayTbs)
//Grouping By day
->groupBy('day')
//Now Converting into Desired Format
->map(function(Collection $collection,$day){
return [
'day' => $day,'dates' => $collection->sortBy('date')->toArray(),];
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。