微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

laravel 数组 groupBy 特定列值

如何解决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 举报,一经查实,本站将立刻删除。