2016-03-15 54 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>"; 
?>