У меня есть избранное меню, которое отображает страны. Это смотрит на 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>';};
Существует много стран, и выполнение этого было бы безумием, не будет он????
Когда у вас много кода, они делают практически то же самое, это признак использования цикла или функции. вместо того, чтобы переписывать тысячи строк кода.
Как заметил Майкл Б., один из простых способов - использовать массив и простой цикл, чтобы отобразить этот список и пометить правильный элемент как выбранный.
$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>';
}
Возможно, сработает что-то вроде этого:
$myCountry = "PL";
foreach ($countries as $country) {
echo '<option value = "'BH'"'
if ($country == $myCountry) {echo ' selected="selected"';}
echo '>Bahrain</option>';
}
Где $countries
- массив или набор записей со всеми данными о странах.
В зависимости от типа $countries
вы должны заменить данные Бахрейна в примере выше данными, взятыми из $countries
.
Пусть $ 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>';
}
Примерно так:
$countries = array('AG' => 'Antigua', 'AR' => 'Argentina', ...);
foreach($countries as $code => $name) {
$selected = ($country == $code) ? 'selected="selected"' : '';
echo '<option value="' . $code . '"' . $selected . ' >' . $name . '</option>';
}
Да, можно прочитать принцип 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>';
}