【问题标题】:How to properly nest ternary operators?如何正确嵌套三元运算符?
【发布时间】:2013-08-19 14:09:31
【问题描述】:

我知道可以嵌套三元运算符,我想在这种情况下使用它们以节省时间(至少在将来)。

我有一个变量可以保存四个值之一:

  • “管理员”
  • “编辑”
  • “wadmin”
  • “wuser”

其中的每一个都用于根据用户类型确定必要的密码长度,分别为 16、12、8 和 8。

我希望 PHP 根据变量的内容来回显这些数字中的每一个,在本例中名为 $match

到目前为止,我所拥有的是:

echo $match == "admin" ? "16" : $match == "edit" ? "12" : "8";

但这总是回显 12。如何重写它以正确回显“16”、“12”或“8”?

【问题讨论】:

  • PHP 的三元运算符坏了。
  • @elclanrs 所以你是说这个应该工作,即使它没有?
  • "可能嵌套三元运算符" — 可能,但不是一个好主意,它只会使代码难以阅读 — "我想在这种情况下使用它们以节省时间" — 三元运算符需要更多的时间来计划简单的 if 语句(所以不要节省开发时间)并且运行速度不会比 if 语句快(所以不要节省任何运行时间)。
  • 我想是的,但它们仍然是我以前从未理解过的编程的一部分,现在我明白了! :)

标签: php echo ternary-operator


【解决方案1】:

虽然它不能直接回答问题,但您可以完全避免嵌套三元:

<?php
$minlen = array(
    "admin" => 16,
    "edit" => 12,
    "wadmin" => 8,
    "wuser" => 8,
);

// Example usage
$match = "admin";
echo $minlen[$match];
?>

【讨论】:

  • 这比使用三元运算符的原始方法要好得多。它避免了处理复杂的代码,并允许非常容易地更改或添加值。
【解决方案2】:

使用括号: echo $match == "admin" ? "16" : ($match == "edit" ? "12" : "8");

【讨论】:

    【解决方案3】:

    使用嵌套,希望对你有所帮助。你可以永远延长;)

    echo $match == "admin" ? "16" : ($match == "edit" ? "12" : ($match == "wadmin" ? "8" : ($match == "wuser" ? "4" : "NONE")));
    

    【讨论】:

      【解决方案4】:

      这样就可以了。

      false 条件括在方括号/圆括号中

      echo ($match == 'admin') ? '16' : (($match == 'edit') ? '12' : '8');
      

      echo $match == 'admin' ? '16' : ($match == 'edit' ? '12' : '8');
      

      【讨论】:

      • 耶!这也有道理。该死的括号! 8 分钟后我可以接受。
      • 这是 PHP 特有的,因为与大多数其他语言不同,PHP 从左到右读取三元运算符。甚至不值得这样做 IMO,我会使用 switchelseif
      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-02-01
      • 2017-09-20
      • 2020-10-06
      相关资源
      最近更新 更多