Как упростить мое меню PHP/mysql выбора страны

У меня есть избранное меню, которое отображает страны. Это смотрит на DB, и оценка по значению в дб показывает вариант, как выбрано. Есть ли более простой путь от выполнения этого, чем:

if ($country == 'AG') {echo '<option value="AG" selected="selected">Antigua</option>';} 
else {echo '<option value="AG">Antigua</option>';};

if ($country == 'AR') {echo '<option value="AR" selected="selected">Argentina</option>';} 
else {echo '<option value="AR">Argentina</option>';};

if ($country == 'AM') {echo '<option value="AM" selected="selected">Armenia</option>';} 
else {echo '<option value="AM">Armenia</option>';};

if ($country == 'AW') {echo '<option value="AW" selected="selected">Aruba</option>';} 
else {echo '<option value="AW">Aruba</option>';};

if ($country == 'AU') {echo '<option value="AU" selected="selected">Australia</option>';} 
else {echo '<option value="AU">Australia</option >';};

if ($country == 'AT') {echo '<option value="AT" selected="selected">Austria</option>';} 
else {echo '<option value="AT">Austria</option>';};

if ($country == 'AZ') {echo '<option value="AZ" selected="selected">Azerbaijan</option>';} 
else {echo '<option value="AZ">Azerbaijan</option>';};

if ($country == 'BS') {echo '<option value="BS" selected="selected">Bahamas</option>';} 
else {echo '<option value="BS">Bahamas</option>';};

if ($country == 'BH') {echo '<option value="BH" selected="selected">Bahrain</option>';} 
else {echo '<option value="BH">Bahrain</option>';};

Существует много стран, и выполнение этого было бы безумием, не будет он????

1
задан user342391 9 June 2010 в 11:35
поделиться

5 ответов

Когда у вас много кода, они делают практически то же самое, это признак использования цикла или функции. вместо того, чтобы переписывать тысячи строк кода.

Как заметил Майкл Б., один из простых способов - использовать массив и простой цикл, чтобы отобразить этот список и пометить правильный элемент как выбранный.

$countries = array(
     'us' => 'United States of America',
     'de' => 'Germany',
     'pl' => 'Poland',
     'fr' => 'France',
     ...
);

foreach ($countires as $code => $name) {
    echo '<option value="' . $code . '" ' . ($country == $code ? 'selected="selected"' : null) . '>' . $name . '</option>';
}
1
ответ дан 2 September 2019 в 23:55
поделиться

Возможно, сработает что-то вроде этого:

$myCountry = "PL";

foreach ($countries as $country) {
  echo '<option value = "'BH'"'

  if ($country == $myCountry) {echo ' selected="selected"';}

  echo '>Bahrain</option>';
}

Где $countries - массив или набор записей со всеми данными о странах.

В зависимости от типа $countries вы должны заменить данные Бахрейна в примере выше данными, взятыми из $countries.

1
ответ дан 2 September 2019 в 23:55
поделиться

Пусть $ countries будет массивом стран из базы данных. Пусть указанное значение страны находится внутри переменной $ country

foreach($countries as $value)
{
    if($country == $value['code'])
       echo '<option value="' . $value['code'] .'" selected="selected">'. $value['name'] . '</option';
    else
       echo '<option value="' . $value['code'] . '">' . $value['name'] . '</option>';
}
0
ответ дан 2 September 2019 в 23:55
поделиться

Примерно так:

$countries = array('AG' => 'Antigua', 'AR' => 'Argentina', ...);

foreach($countries as $code => $name) {
    $selected =  ($country == $code) ? 'selected="selected"' : '';
    echo '<option value="' . $code . '"' . $selected . ' >' . $name . '</option>';
}
0
ответ дан 2 September 2019 в 23:55
поделиться

Да, можно прочитать принцип DRY . Просмотрите свой набор результатов по странам и проверьте внутри цикла, выбрана ли эта страна, например:

$selected_value = 'AG'; // set to stored preference or something
foreach ($countries as $code => $country) {
  echo '<option value="' . htmlspecialchars($code) . '"';
  if ($code == $selected_value) {
    echo ' selected="selected"';
  }
  echo '>' . htmlspecialchars($country) . '</option>';
} 
2
ответ дан 2 September 2019 в 23:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: