douqiao1983 2019-01-02 21:39
浏览 38
已采纳

按年龄类别分组和计算用户

I'm trying to split users in two categories, younger or older than 20, by looping thru them in order to calculate age value with Carbon.

    public function groupAndCountBasedOnAge($users) {
 // i'm giving the array keys & values
    $ageGroups = array('younger than 20' => 0,
                       'older than 20' => 0); 


foreach($users as $u) {

    $now = Carbon::now();
    $u->age = Carbon::createFromFormat('Y-m-d', $u->birth_date);
    $u->age = $now->diffInYears($u->age);  // getting actual age value for each user

    if($u->age < 20 ) {
        $ageGroups[younger than 20'] += 1;
    }
    elseif($u->age > 20 ) {
        $ageGroups['older than 20'] += 1;
    }

return $ageGroups;

}

}

public function index() {

$users = DB::table('users')->get();

$users = $this->groupAndCountBasedOnAge($users);

return view('/users/list', [
    'users' => $users
]);

} However dd($users) always returns the same array, no matter what I change:

array:2 [▼
  "less than 20" => 1
  "older than 20" => 0
]
  • 写回答

2条回答 默认 最新

  • duanrao3371 2019-01-02 22:17
    关注

    You could use the partition() and Count() methods of Laravel Collections.

    use Illuminate\Support\Carbon;
    
    //
    
    public function index() {
    
        $users = DB::table('users')->get();
        $users = $this->groupAndCountBasedOnAge($users);
    
        return view('/users/list', [
            'users' => $users
        ]);
    }
    
    public function groupAndCountBasedOnAge($users)
    {
        list($under, $equalOrAbove) = collect($users)->partition(function ($user) {
            return Carbon::now()
                ->diffInYears(Carbon::createFromFormat('Y-m-d', $user->birth_date)) < 20;
        });
    
        return [
            'underTwenty'  => [
                'users' => $under->all(),
                'count' => $under->count()
            ],
            'equalOrAboveTwenty' => [
                'users' => $equalOrAbove->all(),
                'count' => $equalOrAbove->count()
            ]
        ];
    }
    

    Note

    I've also grouped the users because I guessed you wanted this (acoording to name of your method).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 three.js添加后处理以后模型锯齿化严重
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常