我很难在这里过滤掉多余的“选项”输出。我想我自己很困惑。
foreach ($bv_wg_lf_rf_array_base as $bv_wg_lf_rf_arrayaaa) {
foreach ($bv_wg_lf_rf_array as $base) {
if ($bv_wg_lf_rf_arrayaaa == $base){
$bv_wg_lf_rf_arrayaaa = strtoupper($bv_wg_lf_rf_arrayaaa);
$me .= '<option value="'.$bv_wg_lf_rf_arrayaaa.'" selected>'
.$bv_wg_lf_rf_arrayaaa.'</option>';
}
else {
$base = strtoupper($bv_wg_lf_rf_arrayaaa);
$me .= '<option value="'.$bv_wg_lf_rf_arrayaaa.'">'
.$bv_wg_lf_rf_arrayaaa.'</option>';
}
}
}
echo $me;
这个转储返回(没有多余的)
WG
WG
WG
LF
LF
LF
RF
RF
RF
bv_wg_lf_rf_array_base =
array (size=3)
0 => string 'WG' (length=2)
1 => string 'LF' (length=2)
2 => string 'RF' (length=2)
bv_wg_lf_rf_array
array (size=3)
0 => string 'RF' (length=2)
1 => string '' (length=0)
2 => string '' (length=0)
第一个数组是手动创建的数组,用于确定实际输入,而第二个数组来自数据库。存在三个不同的WG LF和RF列(在db中为null)。
所以基本上是把它全部吐出三次,而不是创建所选择的选项,然后删除跳过并移动到应该没有选中的其他选项。
答案 0 :(得分:1)
首先,您可以将来自数据库的数组减少为单个值,如下所示:
$selected = array_filter($bv_wg_lf_rf_array)[0];
在没有回调的情况下使用array_filter将删除数组中的所有空字符串值。
如果你有一个较旧的PHP版本,可能需要在两个语句中完成:
$selected_array = array_filter($bv_wg_lf_rf_array);
$selected = $selected_array[0];
如果您将生成此数组的查询更改为仅从数据库中获取所选值,则可以避免这种情况,但我只是在处理您在此处所拥有的内容。
这将显着简化构建选项字符串。
foreach ($bv_wg_lf_rf_array_base as $value) {
// see if the value matches the selection
$selected = ($value == $selected) ? 'selected' : '';
// append the option with the appropriate 'selected' setting
$me .= "<option value=\"$value\" $selected>$value</option>";
}
如果您需要处理多项选择,可以跳过array_filter
并使用in_array
检查您的选择,如下所示:
foreach ($bv_wg_lf_rf_array_base as $value) {
$selected = (in_array($value, $bv_wg_lf_rf_array)) ? 'selected' : '';
$me .= "<option value=\"$value\" $selected>$value</option>";
}