2017-01-17 58 views
1

我有一個在db中有許多約會的客戶列表。我想遍歷每個客戶的總計約會時間,以便我可以創建發票。當我運行下面的代碼時,第一個客戶端的約會持續時間被正確添加。然而,我的問題是,對於下一個客戶來說,它似乎也增加了第一個客戶持續時間。 array_sum是正確的方法嗎?如果不是,我需要使用什麼?在Laravel PHP的每個foreach循環中增加array_sum的總和。

foreach($clients as $client) 
     { 
      $appointments = Client::find($client->id)->appointments()->get(); 

       foreach($appointments as $appointment) 
       { 

        $date1  = $appointment->starts_at; 
        $date2  = $appointment->ends_at;       
        $start  = Carbon::parse($date1); 
        $end  = Carbon::parse($date2); 

        $length  = $start->diffinhours($end); 
        $duration[] = $length;   //is this correct? 
        $total = array_sum($duration); //is this correct? 
       } 

      $invoice     = new Invoice; 
      $invoice->total_hours  = $total; 
      dd($invoice); 
      $invoice->save(); 
     } 
+0

每個循環後需要重置總和。我的意思是就在第二個foreach循環代碼之前(在獲得'$ appointmentments'之後)使得總變量爲0,即'$ total = 0' – webDev

回答

1

是的,你可以用這個方法,但是你需要把它移到循環外,你也應該清空$total與每次迭代:

.... 
$duration = []; 

foreach ($appointments as $appointment) 
{ 
    $date1  = $appointment->starts_at; 
    $date2  = $appointment->ends_at;       
    $start  = Carbon::parse($date1); 
    $end  = Carbon::parse($date2); 

    $length  = $start->diffinhours($end); 
    $duration[] = $length; 
} 

$total = array_sum($duration); 
.... 

此外,您還可以添加start_atend_at時間戳the $dates array in a model並使用此代碼代替:

foreach ($appointments as $appointment) 
{ 
    $duration[] = $appointment->starts_at->diffInHours($appointment->ends_at); 
} 
+1

謝謝你。有用。我也實施了關於$日期的建議。 –

2

重置爲每個客戶端,並任命循環之後的持續時間array_sum

foreach ($clients as $client) 
{ 
    $appointments = Client::find($client->id)->appointments()->get(); 

    $duration = array(); 

    foreach ($appointments as $appointment) 
    { 
     $date1  = $appointment->starts_at; 
     $date2  = $appointment->ends_at;       
     $start  = Carbon::parse($date1); 
     $end  = Carbon::parse($date2); 

     $length  = $start->diffinhours($end); 
     $duration[] = $length; 
    } 

    $total = array_sum($duration); 

    $invoice     = new Invoice; 
    $invoice->total_hours  = $total; 
    dd($invoice); 
    $invoice->save(); 
} 
+0

感謝你的這一點。有用。 –