2015-12-21 34 views
0

我很難過濾出多餘的「選項」輸出在這裏。我在想我很困惑自己。多個輸出嵌套每個

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

回答

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

你知道這很好,但我想知道如果選擇了兩個問題,是否會發生問題。例如,可能的WG和RF。如果我們只是抓住了第一個價值,那我們就會捨棄下一個價值,對吧?或者我沒有正確閱讀? – hfw

+0

啊,我假設只有一個會被選中。這裏可能有多種選擇? –

+0

我更新了答案,以添加處理多項選擇的方式。 –