блок if внутри оператора echo? - PullRequest
53 голосов
/ 18 августа 2010

Я подозреваю, что это недопустимо, потому что я получаю "Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный 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>';
  }
  ?>

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

Ответы [ 4 ]

138 голосов
/ 18 августа 2010

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

echo '<option value="'.$value.'" '.(($value=='United States')?'selected="selected"':"").'>'.$value.'</option>';
11 голосов
/ 18 августа 2010

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

Если <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";
}
8 голосов
/ 18 августа 2010

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

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);
7 голосов
/ 18 августа 2010

Ради читабельности это должно быть что-то вроде

<?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 ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...