从阵列中选择选项

时间:2016-03-15 10:31:02

标签: php loops select

我的代码包含一个用于选择多个选项的选择框。

<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',
...
)

有关在这种情况下如何实现这一目标的任何见解?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>";
?>