检测列值结果中的第一个更改

jtw3ybtb  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(296)

我想在自动选择菜单中找到一个分隔符。
现在,当一个字段名的值从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>"; 
}

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

b5buobof

b5buobof1#

php break; 声明应该有效。
假设你有这样一个循环:

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

q0qdq0h22#

循环前:

$last_fieldname = '';

循环内部:

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

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

2g32fytz3#

简单方法:

使用主循环外的跟踪变量跟踪上一个数字。

// 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;
    }
}
3pvhb19x

3pvhb19x4#

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

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

相关问题