PHP:根据foreach循环中另一个变量的变化增加一个变量
PHP: Increment a variable based on change in another variable in foreach loop
我有一个 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
的数据库 table 读取,结构如下:
id line_id parent_id
-- ------- ---------
1 2401 521
2 2401 521
3 2401 521
4 2500 521
5 2502 521
6 2502 521
我想在每次 $line['line_id']
中的值更改时递增 $i
。因此,当结果显示时,它们看起来像这样:
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
等等
只需将之前的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'];
}
注意您可以直接从数据库查询本身获取更改的行号。您可以使用 window 函数,例如 Dense_Rank()
.
你必须存储最后一个循环的最后一个line_id
,然后与下一个循环的line_id
检查它,如果它们不相等则递增$i
,当$i
递增您将 $prev_line_id
设置为当前 line_id
。
$prev_line_id = $lineItem[0]['line_id'] ?? null;
$i = 0;
foreach($lineItem as $line)
{
if($line['line_id'] != $prev_line_id )
{
$i++;
$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'];
}
我有一个 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
的数据库 table 读取,结构如下:
id line_id parent_id
-- ------- ---------
1 2401 521
2 2401 521
3 2401 521
4 2500 521
5 2502 521
6 2502 521
我想在每次 $line['line_id']
中的值更改时递增 $i
。因此,当结果显示时,它们看起来像这样:
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
等等
只需将之前的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'];
}
注意您可以直接从数据库查询本身获取更改的行号。您可以使用 window 函数,例如 Dense_Rank()
.
你必须存储最后一个循环的最后一个line_id
,然后与下一个循环的line_id
检查它,如果它们不相等则递增$i
,当$i
递增您将 $prev_line_id
设置为当前 line_id
。
$prev_line_id = $lineItem[0]['line_id'] ?? null;
$i = 0;
foreach($lineItem as $line)
{
if($line['line_id'] != $prev_line_id )
{
$i++;
$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'];
}