【问题标题】:how to stop adding more data in array in foreach loop如何在foreach循环中停止在数组中添加更多数据
【发布时间】:2020-08-16 20:39:59
【问题描述】:

我循环 2 数组一个日期和数据

        $rdate = $request->month; //<-- Requested month
        $days = Carbon::create(); 
        $days = $days->daysInMonth; //<-- Finding how much days in month

        for ($i = 1; $i < $days; $i++) { //Looping Date
            $date = $rdate . '-' . $i; //Making full Date with formate 'Y-m-d'
            foreach ($games as $game) { //Looping game array have 3 collection ['game1', 'game2', 'game3']
                $result = Result::whereDate('created_at', $date)->where('game', $game->name)->where('admin_id', $admin->id)->first(); // Query Results for getting perticular game with date
                if ($result) { //Checking if current date haven't result
                    $r[] = [
                        'game' => $game->name,
                        'number' => $result->number
                    ];
                } else {
                    $r[] = [
                        'game' => $game->name,
                        'number' => '-'
                    ];
                }
            }

            $resultd[] = [
                'date' => $date,
                'results' => $r // i want to stop adding old data here
            ];
        }

我期待这个结果

{"results":[{"date":"2020-08-1","results":[{"game":"game1","number":"-"},{"game":"game2","number":"-"},{"game":"game3","number":"-"}]},{"date":"2020-08-2","results":[{"game":"game1","number":"-"},{"game":"game2","number":"-"},{"game":"game3","number":"-"}]

实际得到什么

将旧的 $r 添加到结果数组中

如何修复它我试图打破它但无法弄清楚

【问题讨论】:

  • 我解决了这个问题,但我仍然想要更好的解决方案
  • 你没有得到“实际得到什么”的结果。
  • 我不太明白你的问题,但如果你想停止循环,请使用“break”。

标签: php laravel laravel-5 eloquent


【解决方案1】:

我有一些未经测试的代码,因为我没有您的数据,但我认为下面的代码应该可以工作,您可能需要根据需要修改一些代码。

        $rdate = '2020-8';
        
        $days = collect([1,2,3]);
        
        $games = collect(['game1', 'game2', 'game3']);
        
        return $days->map(function ($item) use ($rdate,$games) {
            $date = $rdate.'-'.$item;
            
            return [ 
             "date" => $date,
             "results" => $games->map(function ($g) use ($date) {
                 
                 $result = Result::whereDate('created_at', $date)
                                   ->where('game', $g->name)
                                   ->where('admin_id', $admin->id)
                                   ->first();
                                   
                 return ['game' => $g->name,
                         'number' => $result ? $result->number : '-',
                 ];
             })
         ];   
        });

【讨论】:

    猜你喜欢
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 2011-05-27
    • 2011-03-07
    • 2017-06-21
    • 2020-06-16
    相关资源
    最近更新 更多