为每个嵌套多个输出

时间:2015-12-21 22:42:24

标签: php arrays foreach

我很难在这里过滤掉多余的“选项”输出。我想我自己很困惑。

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)。

所以基本上是把它全部吐出三次,而不是创建所选择的选项,然后删除跳过并移动到应该没有选中的其他选项。

1 个答案:

答案 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>";
}