douxie9347 2018-10-09 17:08
浏览 425
已采纳

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

I have a foreach loop that prints the history of line item changes in my application. Each line item has a number, and each line item can have multiple changes.

What I want to do is display the line number alongside each change when my loop executes. $i will hold the line number.

$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'];
}

The code reads from a DB table called line_item_changes with the following structure:

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

I want to increment $i every time the value in $line['line_id'] changes. So that, when the results display, they look something like this:

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

etc.

  • 写回答

2条回答 默认 最新

  • dqwd71332 2018-10-09 17:30
    关注

    Just store the previous line_id in a variable, and update $i if the value changes. Try the following (explanation in code comments):

    $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'];
    }
    

    Note that you can get the changing line number directly from DB query itself. You can use window functions like Dense_Rank().

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 wamp3.3.5安装完成后图标正常显示绿色,鼠标左右键点击图标均无反应。求解决方法。
  • ¥15 鼠标点击的这条记录了什么?
  • ¥15 在写pid调速的程序时,电机始终维持最大速度
  • ¥15 帅锅们,我很想知道这个论坛是用什么模板搭的(T_T)
  • ¥15 请问如何查看手机root记录?
  • ¥15 商城小程序订单号重复
  • ¥15 学校优化算法sbo和蚁群算法怎么结合
  • ¥21 matlab怎么求时域信号的二阶导数
  • ¥15 判断两个表是否完全相同
  • ¥15 java map类型数据格式,如何快速通过前缀匹配元素