检测列值结果的首次变化

时间:2018-10-14 22:29:45

标签: php mysql mysqli

我正在尝试在自动选择菜单中使用分隔线。

现在,当字段名将值从0更改为1时,我想检测到该值并插入一个数据分隔符。

到目前为止,这是我所拥有的,但是对于所有出现1值的情况都将重复此操作。

fieldname 0
fieldname 0
fieldname 0
[here should the change be detected and the divider inserted]
fieldname 1
fieldname 1
fieldname 1

此代码在所有1个值之上生成一个除法器:

if($fieldname == "1") {
    $output .= "<option data-divider=\"true\">------------</option>"; 
}

有人知道第一个被发现后如何突破吗?

4 个答案:

答案 0 :(得分:1)

您需要存储输出已打印数据分隔符的状态

$printed = false;
foreach ($loopingLogic) {
  // normal option logic
  if ($fieldname === '1' && !$printed) {
    $output .= '<option>..</option>';
    $printed = true;
  }
}

答案 1 :(得分:1)

循环之前:

$last_fieldname = '';

在循环内:

if (empty($last_fieldname))
    $last_fieldname = $fieldname;

if ($fieldname != $last_fieldname) {
    $output .= "<option data-divider=\"true\">------------</option>";
    $last_fieldname = $fieldname;
}

答案 2 :(得分:0)

php break;语句应该起作用。

假设您处于某种循环中

if($fieldname == "1") {
  $output .= "<option data-divider=\"true\">------------</option>"; 
  break; //should stop the loop from processing further.
}

答案 3 :(得分:0)

简单方法:

使用主循环之外的跟踪变量跟踪先前的数字。

// Outside the loop, and $fields being the array you will traverse through
$previousUniqueFieldName = key(reset($fields));

for ($fields as $fieldName => $fieldValue) {

    // Inside the loop:
    if($fieldname != $previousUniqueFieldName) {
        $output .= "<option data-divider=\"true\">------------</option>";
        $previousUniqueFieldName = $fieldName;
    }
}