Я подозреваю, что это недопустимо, потому что я получаю сообщение об ошибке "Parse error: синтаксическая ошибка, неожиданный T_IF in ...". Но я не мог найти способ достичь своей цели. Вот мой код:
<?php
$countries = $myaddress->get_countries();
foreach($countries as $value){
echo '<option value="'.$value.'"'.if($value=='United States') echo 'selected="selected"';.'>'.$value.'</option>';
}
?>
Он отображает список стран в элементе выбора и устанавливает США по умолчанию. Я не работаю, к сожалению ...
Вы захотите использовать тернарный оператор, который действует как сокращенный оператор IF / Else:
echo '<option value="'.$value.'" '.(($value=='United States')?'selected="selected"':"").'>'.$value.'</option>';
Вы всегда можете использовать синтаксис (<условие>? <Значение, если истина>: <значение, если ложь>)
(он называется тернарным оператором - спасибо Марку за напоминание :) ).
Если <условие>
истинно, оператор будет оцениваться как <значение, если истинно>
. В противном случае он будет оцениваться как <значение, если ложь>
Например:
$fourteen = 14;
$twelve = 12;
echo "Fourteen is ".($fourteen > $twelve ? "more than" : "not more than")." twelve";
Это то же самое, что:
$fourteen = 14;
$twelve = 12;
if($fourteen > 12) {
echo "Fourteen is more than twelve";
}else{
echo "Fourteen is not more than twelve";
}
Ради удобочитаемости должно быть что-то вроде
<?php
$countries = $myaddress->get_countries();
foreach($countries as $value) {
$selected ='';
if($value=='United States') $selected ='selected="selected"';
echo '<option value="'.$value.'"'.$selected.'>'.$value.'</option>';
}
?>
желание запихнуть ВСЕ в одну строку - это болезнь, чувак. Пишите внятно.
Но есть другой способ, лучший. Нет необходимости использовать эхо. Научитесь использовать шаблонов. Сначала подготовьте свои данные, а только потом покажите их готовыми.
Часть бизнес-логики:
$countries = $myaddress->get_countries();
$selected_country = 1;
Часть шаблона:
<? foreach($countries as $row): ?>
<option value="<?=$row['id']?>"<? if ($row['id']==$current_country):> "selected"><? endif ?>
<?=$row['name']?>
</option>
<? endforeach ?>
Используйте тернарный оператор :
echo '<option value="'.$value.'"'.($value=='United States' ? 'selected="selected"' : '').'>'.$value.'</option>';
И пока вы это делаете, вы можете использовать printf
, чтобы сделать ваш код более читаемым / управляемым:
printf('<option value="%s" %s>%s</option>',
$value,
$value == 'United States' ? 'selected="selected"' : ''
$value);