PHP:根据foreach循环中另一个变量的变化来增加变量

时间:2018-10-09 17:08:28

标签: php cakephp-2.0 cakephp-2.1

我有一个foreach循环,可在我的应用程序中打印订单项更改的历史记录。每个订单项都有一个数字,每个订单项可以有多个更改。

我想做的是在执行循环时在每次更改旁边显示行号。 $i将保留行号。

$i = 1;
foreach($lineItem as $line) {
   echo $i; //line number
   echo $line['field_changed'];
   echo $line['change_date'];
   echo $line['change_from'];
   echo $line['change_to'];
}

代码从名为line_item_changes的数据库表中读取,其结构如下:

id  line_id  parent_id
--  -------  ---------
1   2401     521
2   2401     521
3   2401     521
4   2500     521
5   2502     521
6   2502     521  

每次$i中的值更改时,我想递增$line['line_id']。这样,当显示结果时,它们看起来像这样:

Line #: 1
field: notes
date: 10/9/2018
from: test
to: test2

Line #: 1
field: quantity
date: 10/1/2018
from: 4
to: 3

Line #: 2
field: need_date
date: 10/1/2018
from: 10/24/2018
to: 10/27/2018

2 个答案:

答案 0 :(得分:1)

只需将前一个select * from [student] s left outer join [attendance] a on s.[id] = a.[id] and a.[attendanceRecordDate] = @date 存储在变量中,并在值更改时更新line_id。尝试以下操作(代码注释中的解释):

$i

注意,您可以直接从数据库查询本身获取更改的行号。您可以使用$i = 1; $prev_line_id = null; // initializing the previous value foreach($lineItem as $line) { // if the previous line_id exists if (isset($prev_line_id)) { // if previous value does not match with the current value if ($prev_line_id != $line['line_id']) { // increment the line number $i++; } } // set the previous value $prev_line_id = $line['line_id']; echo $i; //line number echo $line['field_changed']; echo $line['change_date']; echo $line['change_from']; echo $line['change_to']; } 之类的窗口函数。

答案 1 :(得分:1)

您必须存储上一个循环的最后line_id,然后与下一个循环的line_id进行检查,如果它们不相等,则在{{ 1}}递增,您将$i设置为当前$i

$prev_line_id