我正在尝试在自动选择菜单中使用分隔线。
现在,当字段名将值从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>";
}
有人知道第一个被发现后如何突破吗?
答案 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;
}
}