2010-11-09 165 views
0

我正在構建一個簡單的權重日誌,其中有一個顯示用戶進度的表。我正在使用Codeigniter。比較兩個值的PHP foreach循環

<?php foreach($logs as $log) : ?> 
     <tr> 
     <td><?php echo $log->date ;?></td> 
     <td><?php echo $log->weight ;?> kg.</td> 
     <td><!-- variation between this record and previous record. weigth[a] - weight[b] --></td> 
     <td></td> 
     <td><?php echo anchor('logs/edit/'.$log->id, 'Editar'); ?> <?php echo anchor('logs/delete/'.$log->id, 'Delete'); ?></td> 
     </tr> 
    <?php endforeach ;?> 

我試圖計算第一行和第二行之間的差異,以便獲得日誌之間的重量損失或增益。我想知道如何訪問循環的前一個記錄,以便從當前記錄的重量中減去它。

--------------------------------------- 
    DATE  | WEIGHT | VARIATION 
--------------------------------------- 
    Nov 20 | 70 kg |  -1 kg  << LAST LOGGED WEIGHT, FIRST IN ARRAY 
....................................... 
    Nov 15 | 71 kg |  - 
--------------------------------------- 
+0

添加了循環結果的快速表示法 – Landitus 2010-11-09 04:16:01

回答

5

一個簡單的方法來做到這一點:

<?php $previousWeight = null; ?> 
<?php foreach($logs as $log) : ?> 
    <tr> 
    <td> 
     <?php 
      if ($previousWeight) { 
       echo $previousWeight - $log->weight; 
      } 
      $previousWeight = $log->weight; 
     ?> 
    </td> 
    </tr> 
<?php endforeach; ?> 

或者,反向方式:

<?php 
    $current = current($logs); 
    $next = next($logs); 
?> 
<?php while ($current) : ?> 
    <tr> 
     <td><?php echo $current->date; ?></td> 
     ... 
     <td> 
      <?php 
       if ($next) { 
        echo $current->weight - $next->weight; 
       } 
      ?> 
     </td> 
    </tr> 
    <?php 
     $current = $next; 
     $next = next($logs); 
    ?> 
<?php endwhile; ?> 

如果你的數組鍵都保證數字(他們可能是)這可以簡化很多。見@William's answer

+0

它似乎在工作,雖然表中的第一個變體在它不應該是空白的時候是空白的。表格的最後一個變體應該是空白的,因爲之前沒有比較它的權重。這就像變體列應該有一些抵消。 – Landitus 2010-11-09 02:57:03

+0

@Landitus對不起,我不明白。如果你想比較以前的記錄,當然* first *行將是空白的,因爲* first *行沒有* previous *記錄...你能澄清你到底想要什麼嗎? – deceze 2010-11-09 03:03:00

+0

我想我的混淆與數組,它是按日期排序最後一次記錄的權重是表(或數組)的第一個值。因此,最後一次記錄的權重位於頂部,並且其關鍵值爲0.這意味着第一個記錄的權重位於表底部,這就是爲什麼它不應該具有變化值(以前的權重) – Landitus 2010-11-09 04:06:09

1

你可以嘗試使用foreachhere)的key => value選項。這會給你日誌中的當前索引,所以找到以前的索引應該是index = ($key == 0) ? $key : ($key - 1); $old_weight = $logs[$index];(語法可能有點偏離,但是這個想法就在那裏)。

+0

您的答案假定連續的數字索引。可能是這種情況(給出代碼示例),但值得一提。 – 2010-11-09 01:50:54

+0

我正在嘗試這種方法以及由deceze提供的方法(這對我來說看起來更清楚)。 – Landitus 2010-11-09 02:58:13