2010-11-09 358 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