【问题标题】:if block inside echo statement?如果在 echo 语句中阻塞?
【发布时间】:2011-03-31 05:45:22
【问题描述】:

我怀疑这是不允许的,因为我收到“解析错误:语法错误,意外的 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>';
  }
  ?>

它的作用是在选择元素中显示国家列表并将美国设置为默认值。可悲的是我不工作...

【问题讨论】:

    标签: php


    【解决方案1】:

    您将希望使用 ternary 运算符,它充当缩短的 IF/Else 语句:

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

    【讨论】:

    • 这就是三元运算符有用的地方。很快,非常感谢!
    • 在这种情况下,它不是“我的偏好”。我喜欢默认/设置变量的三元运算符。但鉴于这就是你所问的,你就是这样做的:)
    • a三元运算符而不是三元运算符(虽然我不知道其他三元运算符)。另一个常用术语是条件运算符。
    • 是的,对我来说这是一个容易被忽视的错误。修复了秋葵汤。
    【解决方案2】:

    使用ternary operator

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

    【讨论】:

      【解决方案3】:

      您始终可以使用 ( &lt;condition&gt; ? &lt;value if true&gt; : &lt;value if false&gt; ) 语法(它被称为 ternary operator - 感谢 Mark 提醒我 :))。

      如果&lt;condition&gt; 为真,则该语句将被评估为&lt;value if true&gt;。如果不是,它将被评估为&lt;value if false&gt;

      例如:

      $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";
      }
      

      【讨论】:

      • 正如@Gumbo 指出的那样,这只是一个三元运算符,而不是“the”。 “另一个常用术语是条件运算符。”
      【解决方案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 ?>
      

      【讨论】:

        猜你喜欢
        • 2020-05-18
        • 2023-04-01
        • 2014-11-16
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        相关资源
        最近更新 更多