从数组中获取选择选项


Getting Select Options From Array

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

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

在这种情况下如何做到这一点有什么见解吗?

你可以试试 -

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

你也可以这样做,它与你的代码不同

<?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>";
?>