2016-03-15 52 views
1

我的代碼包含一個用於選擇多個選項的選擇框。從陣列中獲取選項

<select name="menu-item-visibility[<?php echo $item_id; ?>][]" id="edit-menu-item-visibility-<?php echo $item_id; ?>" class="chzn-select" multiple="true" 
    <option value="AF" <?php $val = get_post_meta($item_id, 'locations', true); if (is_array($val)) { if (in_array("AF", $val)) { echo "selected='selected'"; } else { echo ""; } } ?> >Afghanistan</option> 
    <option value="AL" <?php $val = get_post_meta($item_id, 'locations', true); if (is_array($val)) { if (in_array("AL", $val)) { echo "selected='selected'"; } else { echo ""; } } ?> >Albania</option> 
    ... 
</select> 

的問題是,我一遍又一遍地編寫相同的代碼,並選擇框單獨組成的代碼行的50%以上。似乎有點浪費。我想知道是否可以通過循環存儲在單獨文件中的國家數組來應用一些抽象。

$countries = array (
'AF' => 'Afghanistan', 
'AL' => 'Albania', 
... 
) 

在這種情況下如何完成這一任務? -

回答

1

您可以嘗試

<select name="menu-item-visibility[<?php echo $item_id; ?>][]" id="edit-menu-item-visibility-<?php echo $item_id; ?>" class="chzn-select" multiple="true" 
<?php 
$vals = get_post_meta($item_id, 'locations', true); 
foreach($countries as $key => $value) { // Loop through countries 
?> 
    <option value="<?php echo $key;?>" 
    <?php echo (is_array($vals) && in_array($key, $vals)) ? 'selected' : ''; ?> > 
    <?php echo $value;?> 
    </option> 
<?php 
} 
?> 
</select> 
+0

刪除後' '選擇' 額外的花括號做到這樣的,它的不同: '';'。並將'is_array($ val)'改爲'is_array($ vals)'。除此之外,還有其他作品!謝謝! – j8d

0

你也可以從你的代碼

<?php 
    $countries = ['de' => 'Germany','pl' => 'Poland','fr' => 'France']; 
    echo "<select>"; 
    echo "<option value=''>Select Country</option>"; 
    $country = "pl"; 
    foreach ($countries as $code => $name) { 
     echo '<option value="' . $code . '" ' . ($country == $code ? 'selected="selected"' : null) . '>' . $name . '</option>'; 
    } 
    echo "</select>"; 
?>