2016-03-23 103 views
3

我正在循環foreach,我需要做一些這樣的邏輯: 如果迭代不是最後一個。收集價格。當迭代是最後的時候。從收集的價格中減去總數。除了最後一次迭代價格。我沒有得到下面的代碼。但它不起作用。確定並做foreach循環,除了最後一次迭代

$i = 0; 
    $credit = ''; 
    $count = count($reslist); 

    foreach ($reslist as $single_reservation) { 
      //All of the transactions to be settled by course 
      //$credit    = $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value'); 

      if ($i > $count && $single_reservation != end($reslist)) { 
       $gather_sum_in_czk += $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value'); 
       $credit    = $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value'); 
      } 
      //Last iteration need to subtract gathered up sum with total. 
      else { 
       $credit = $suminczk - $gather_sum_in_czk; 
      } 
    $i++; 
    } 

編輯:試圖收集了價格所有互動EXECPT LAST:

  if ($i != $count - 1 || $i !== $count - 1) { 
       $gather_sum_in_czk += $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value'); 
       $credit    = $this->Reservations_model->find_res_price($single_reservation['value']) * $this->input->post('currency_value'); 
      } 

      else { 
       $credit = $suminczk - $gather_sum_in_czk; 
      } 
+2

你有一個計數器'$ i'和'count'中的總數,所以'if($ i == $ counter){}'會抓住最後一個嗎? – Egg

+0

在第一個循環中'$ i> $ count',$ i是0,因此它怎麼會比$ count更大? –

+0

看我的編輯。我需要先收集最後所有的答案。然後使用'$ reslist'的最後一個 – Prague2

回答

1

SPL CachingIterator始終是一個元素背後的內iterator。因此,它可以報告是否會通過產生下一個元素。
對於示例,我選擇generator來演示此方法不依賴任何其他數據,例如,數($陣列)。

<?php 
// see http://docs.php.net/CachingIterator 
//$cacheit = new CachingIterator(new ArrayIterator(range(1,10))); 
$cacheit = new CachingIterator(gen_data()); 

$sum = 0;     
foreach($cacheit as $v) { 
    if($cacheit->hasNext()) { 
     $sum+= $v; 
    } 
    else { 
     // ...and another operation for the last iteration 
     $sum-=$v; 
    } 
} 

echo $sum; // 1+2+3+4+5+6+7+8+9-10 = 35 


// see http://docs.php.net/generators 
function gen_data() { 
    foreach(range(1,10) as $v) { 
     yield $v; 
    } 
} 
0

foreach -ing在PHP陣列同時返回鍵(整數索引如果純陣列)和值。爲了能夠使用的值,使用下面的結構:

foreach ($array as $key => $value) { 
... 
} 

,那麼你可以檢查$key >= count($array) - 1是否(在基於0陣列還記得,最後一個元素是count($array) - 1

你原來的代碼幾乎工程。 ,只是錯在if條件。使用$i >= $count - 1而不是$i > $count

+0

只有對數組鍵使用數字索引值時,才能使用這些鍵。由於@布拉格2並未顯示數組是如何創建或填充的,這是一個假設。使用'$ i'計數器更可靠。 –

+0

我的數組存儲的密鑰和值只是不是數字 – Prague2

+0

事實上,這是對密鑰的假設。但是,最後一段適用。 – LeleDumbo

相關問題