如果块里面的回声陈述?

我怀疑这是不允许的,因为我得到“parsing错误:语法错误,意外的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元素中显示国家列表,并将美国设置为默认值。 我不伤心地工作

你会想要使用 作为缩短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来使你的代码更易读/可pipe理:

 printf('<option value="%s" %s>%s</option>', $value, $value == 'United States' ? 'selected="selected"' : '' $value); 

你总是可以使用( <condition> ? <value if true> : <value if false> )语法(它被称为三元运算符 – 感谢Mark提醒我:) )。

如果<condition>为true,那么该语句将被评估为<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 ?>