多个输出嵌套每个

问题描述:

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

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

因此,基本上它将它吐出三次,而不是创建选定的选项,然后擦除跳过并移动到其他未选定的选项。

+0

没有帮助,我们没有原始数组。我知道有些人会讨厌使用数字索引的传统前循环,但我认为这可能可以帮助您减少混淆。 – developerwjk

+3

当你可以像'$ bv_wg_lf_rf_array_base'和'$ bv_wg_lf_rf_array_base [$ i]'时,我的意思是所有这些变量名称为'$ bv_wg_lf_rf_array_base'和'$ bv_wg_lf_rf_arrayaaa'和'$ bv_wg_lf_rf_array'作为'$ base''...你更好有很多阿司匹林得心应手。 – developerwjk

+0

这是原始数组@developerwjk。尽管在var名字上我同意你的看法。我会重新考虑这一点。 – hfw

首先,可以减少来自数据库这样一个值数组:

$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>"; 
} 
+0

你知道这很好,但我想知道如果选择了两个问题,是否会发生问题。例如,可能的WG和RF。如果我们只是抓住了第一个价值,那我们就会舍弃下一个价值,对吧?或者我没有正确阅读? – hfw

+0

啊,我假设只有一个会被选中。这里可能有多种选择? –

+0

我更新了答案,以添加处理多项选择的方式。 –