если блокировать внутреннюю эхо-инструкцию?

Я подозреваю, что это недопустимо, потому что я получаю сообщение об ошибке «Ошибка анализа: ошибка синтаксиса, неожиданная ошибка T_IF в …». Но я не мог найти способ достичь своей цели. Вот мой код:

<?php $countries = $myaddress->get_countries(); foreach($countries as $value){ echo '<option value="'.$value.'"'.if($value=='United States') echo 'selected="selected"';.'>'.$value.'</option>'; } ?> 

Что он делает, так это отображает список стран в элементе select и устанавливает США по умолчанию. Я не работаю печально …

Solutions Collecting From Web of "если блокировать внутреннюю эхо-инструкцию?"

Вы захотите использовать тройной оператор, который действует как сокращенное утверждение IF / Else:

 echo '<option value="'.$value.'" '.(($value=='United States')?'selected="selected"':"").'>'.$value.'</option>'; 

Используйте тернарный оператор :

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

Вы всегда можете использовать синтаксис ( <condition> ? <value if true> : <value if false> ) (он называется троичным оператором – благодаря Mark для того, чтобы меня переустановить 🙂 ).

Если <condition> истинно, оператор будет оцениваться как <value if true> . Если нет, это будет оцениваться как <value if false>

Например:

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