[英]how to use <optgroup> in a foreach PHP?
我需要首先显示在线用户标签,然后显示所有在线用户,然后结束第一个<optgroup>
离线和空闲也一样。
码:
foreach($alt_user_result as $cur_user) {
if( $cur_user[user_status]=='online') {
echo "<option class='green_status' value='$cur_user[user_id]'>$cur_user[username] | $cur_user[user_status]
</option>";
}
elseif( $cur_user[user_status]=='idle') {
echo "<option class='yellow_status' value='$cur_user[user_id]'>$cur_user[username] | $cur_user[user_status]
</option>";
}
elseif( $cur_user[user_status]=='offline') {
echo "<option class='gray_status' value='$cur_user[user_id]'>$cur_user[username] | $cur_user[user_status]
</option>";
}
}
我试图在<option class='gray_status'
之前添加<optgroup>
,但是它会像这样
<optgroup><option></option><optgroup>
<optgroup><option></option><optgroup>
<optgroup><option></option><optgroup>
<optgroup><option></option><optgroup>
<optgroup><option></option><optgroup>
我想这样:
<optgroup lable="online">
<option></option>
<option></option>
<option></option>
<optgroup>
<optgroup lable="offline">
<option></option>
<option></option>
<option></option>
<optgroup>
......
查询:
$alt_user_result = execute_pdo_query("SELECT U.username, U.user_id, T.last_activity_time,
case WHEN TIMESTAMPDIFF( MINUTE, T.last_activity_time ,NOW() ) <= 5 THEN 'online'
WHEN ( TIMESTAMPDIFF( MINUTE, T.last_activity_time ,NOW() ) > 5 AND
TIMESTAMPDIFF( MINUTE, T.last_activity_time ,NOW() ) <=30 ) THEN 'idle'
ELSE 'offline' end as user_status
FROM user_skills S, users U
LEFT JOIN user_status T ON U.user_id=T.user_id
WHERE S.user_id=U.user_id and S.task_type_id=? and S.permission='Yes';",
array($tablerow['task_type_id']));
感谢所有人提前帮助!
如果数组按在线状态排序,您可以执行以下简单操作:
$prevGroup = '';
foreach($alt_user_result as $cur_user) {
$curGroup = $cur_user['user_status'];
if ($curGroup != $prevGroup) {
if ($prevGroup != '') {
echo '</optgroup>';
}
echo '<optgroup label="' . ucfirst($curGroup) . '">';
$prevGroup = $curGroup;
}
if ($cur_user[user_status] == 'online') {
echo "<option class='green_status' value='$cur_user[user_id]'>$cur_user[username] | $cur_user[user_status]
</option>";
} else if ($cur_user[user_status] == 'idle') {
echo "<option class='yellow_status' value='$cur_user[user_id]'>$cur_user[username] | $cur_user[user_status]
</option>";
} else if ($cur_user[user_status] == 'offline') {
echo "<option class='gray_status' value='$cur_user[user_id]'>$cur_user[username] | $cur_user[user_status]
</option>";
}
} // foreach
echo '</optgroup>';
如果数组未按联机状态排序,则可以在运行上述代码之前使用usort()
进行排序。
编辑:这是usort
代码,将按您想要的顺序对数组进行排序示例 :
function userStatusSort($a, $b) {
$a = $a['user_status'];
$b = $b['user_status'];
if ($a == $b) {
return 0;
} else if ($a == 'online') {
return -1;
} else if ($a == 'idle' && $b == 'offline') {
return -1;
} else {
return 1;
}
}
我将从将用户分类到单独的数组开始
$online_users = array();
$offline_users = array();
$idle_users = array();
foreach($alt_user_result as $cur_user) {
if($cur_user[user_status]=='online'){
$online_users[] = $cur_user;
}
//and so forth...
}
然后回应他们
echo "<optgroup>"
foreach($online_users as $cur_user){
echo "<option class='green_status' value='$cur_user[user_id]'>$cur_user[username] | $cur_user[user_status]
</option>";
echo "</optgroup>"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.