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

Я подозреваю, что это недопустимо, потому что я получаю сообщение об ошибке "Ошибка анализа: ошибка синтаксиса, неожиданная ошибка 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 и устанавливает для Соединенных Штатов значение по умолчанию. Я не работаю грустно...

Ответы

Ответ 1

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

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

Ответ 3

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

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

Ответ 4

В целях удобочитаемости это должно быть что-то вроде

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