Добавить недостающие даты в массив

Я хочу показать данные за текущую неделю. В базе данных у меня есть определенные данные о дате, которые я заполняю отсутствующими датами, и на странице просмотра я показываю это с помощью цикла foreach, потому что я хочу установить для них разные значения. Но он показывает несколько раз данные из-за 2 циклов foreach. Я хочу получить результат в одном массиве. Мой код:

 public function cashflowdetails() { 
             
            $cashflow = CashModel::orderBy('payment_date','asc') ->get();  
            $cashflow_array = [];
            $cashflowDate_array = [];
                 
            $now = Carbon::now();
            if (Input::get('from') != '') {
                $weekStartDate =Input::get('from') ;
            }
            else{
                $weekStartDate = Carbon::now()->startOfWeek();
            }  
            if (Input::get('to') != '') {
                $weekEndDate = Input::get('to');
            }
            else{
                $weekEndDate = Carbon::now()->endOfWeek()->addDay();
            } 
                $period = CarbonPeriod::create($weekStartDate, $weekEndDate);
                foreach ($period as $date) {
                    $dt    = new DateTime($date->format("Y-m-d")); 

                    if ($dt->format('l')!= 'Sunday' && $dt->format('l')!= 'SUNDAY' && $dt->format('l')!= 'SATURDAY' && $dt->format('l')!= 'Saturday')
                    {
                        foreach($cashflow as $cash){ 
                                if ($date->format("Y-m-d")  === $cash->payment_date )
                                {    
                                    $dbData['id'] = $cash->id;
                                    $dbData['payment_date'] = $cash->payment_date;
                                    $d    = new DateTime($cash->payment_date); 
                                    $dbData['day'] = $d->format('l');
                                    $dbData['opening_balance'] = $cash->opening_balance;
                                    $dbData['other_income'] = $cash->other_income;
                                    $dbData['rent'] = $cash->rent;
                                    $dbData['labour'] = $cash->labour;
                                    $dbData['electricity'] = $cash->electricity;
                                    $dbData['creditors'] = $cash->creditors; 
                                    $dbData['insurance'] = $cash->insurance;
                                    $dbData['direct_debits'] = $cash->direct_debits;
                                    $dbData['others'] = $cash->others; 
                                    $dbData['total_amount'] = $cash->total_amount; 
                                    $dbData['updated_at'] = $cash->updated_at; 
                                    $dbData['created_at'] = $cash->created_at;  
                                    print_r($cash->payment_date);   
                                    $cashflow_array[] = $dbData;                                                         
                                }
                                else{ 
                                    $dbData['id'] = null;
                                    $dbData['payment_date'] = $date->format("Y-m-d");
                                    $d    = new DateTime($date->format("Y-m-d")); 
                                    $dbData['day'] = $d->format('l');
                                    $dbData['labour'] = 0;
                                    $dbData['opening_balance'] = 0;
                                    $dbData['other_income'] = 0;
                                    $dbData['rent'] =0;
                                    $dbData['electricity'] = 0;
                                    $dbData['creditors'] = 0; 
                                    $dbData['insurance'] =0;
                                    $dbData['direct_debits'] = 0;
                                    $dbData['others'] = 0; 
                                    $dbData['total_amount'] = 0; 
                                    $dbData['updated_at'] = ''; 
                                    $dbData['created_at'] = ''; 
                                    $cashflowDate_array[] = $dbData;
                                }  
                                //break;     
                            }
                                
                        }
                    }  
                 $cashflow = array_replace($cashflowDate_array, $cashflow_array); 
                return $cashflow; 
    } 

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
227
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

you can achieve it easily by using a variable storing your current date, and double checking if the date is repeating or not.
For example:
//all the below code goes inside the foreach($cashflow as $cash)

//declare variable


    $flag = false;  
    $counter = 0;
 
    if ($counter == 0)
    {
        $dt = new DateTime($date->format("Y-m-d"));
        $curDate = $dt;
    }else{
              $dt = new DateTime($date->format("Y-m-d"));
         }  
    
    if ($curDate == $dt && counter !=0)
    {
       $flag = true;
    }  

    $counter++;

//on your if conditions if ($dt->format('l')!= 'Sunday' && $dt->format('l')!= 'SUNDAY' && $dt->format('l')!= 'SATURDAY' && $dt->format('l')!= 'Saturday')


//please add the condition:
    && flag == false
Ответ принят как подходящий
public function cashflowdetails() { 
             
    $cashflow = CashModel::orderBy('payment_date','asc') ->get();  
    $cashflow_array = [];
    $cashflowDate_array = [];
         
    $now = Carbon::now();
    
    if (Input::get('from') != '') {
        $weekStartDate =Input::get('from') ;
    }
    else{
        $weekStartDate = Carbon::now()->startOfWeek();
    }  
    if (Input::get('to') != '') {
        $weekEndDate = Input::get('to');
    }
    else{
        $weekEndDate = Carbon::now()->endOfWeek()->addDay();
    } 
    
    $period = CarbonPeriod::create($weekStartDate, $weekEndDate);
    foreach ($period as $date)
    {
        //add a flag to see if the code was executed or not
        $isExecuted = false;
        $dt    = new DateTime($date->format("Y-m-d")); 
        if ($dt->format('l')!= 'Sunday' && $dt->format('l')!= 'SUNDAY' && $dt->format('l')!= 'SATURDAY' && $dt->format('l')!= 'Saturday')
        {
            foreach($cashflow as $cash){ 
                if (  $date->format("Y-m-d")   === $cash->payment_date )
                {    
                    $dbData['id'] = $cash->id;
                    $dbData['payment_date'] = $cash->payment_date;
                    $d    = new DateTime($cash->payment_date); 
                    $dbData['day'] = $d->format('l');
                    $dbData['opening_balance'] = $cash->opening_balance;
                    $dbData['other_income'] = $cash->other_income;
                    $dbData['rent'] = $cash->rent;
                    $dbData['labour'] = $cash->labour;
                    $dbData['electricity'] = $cash->electricity;
                    $dbData['creditors'] = $cash->creditors; 
                    $dbData['insurance'] = $cash->insurance;
                    $dbData['direct_debits'] = $cash->direct_debits;
                    $dbData['others'] = $cash->others; 
                    $dbData['total_amount'] = $cash->total_amount; 
                    $dbData['updated_at'] = $cash->updated_at; 
                    $dbData['created_at'] = $cash->created_at;

                    //if executed, assign it true 
                    $isExecuted = true; 
                    //psuh the values to array
                    $cashflow_array[] = $dbData;
                    //break the loop
                    break;                          
                }               

            }     
            //if not found in database
            if (!$isExecuted){               
                $dbData['id'] = NULL;
                $dbData['payment_date'] = $date->format("Y-m-d");
                $d    = new DateTime($date->format("Y-m-d")); 
                $dbData['day'] = $d->format('l');
                $dbData['labour'] = 0;
                $dbData['opening_balance'] = 0;
                $dbData['other_income'] = 0;
                $dbData['rent'] =0;
                $dbData['electricity'] = 0;
                $dbData['creditors'] = 0; 
                $dbData['insurance'] =0;
                $dbData['direct_debits'] = 0;
                $dbData['others'] = 0; 
                $dbData['total_amount'] = 0; 
                $dbData['updated_at'] = ''; 
                $dbData['created_at'] = ''; 
                $cashflow_array[] = $dbData;                          
            }
        }
    } 

    return $cashflow_array; 
    
}

Другие вопросы по теме