【问题标题】:Ternary operator with multiple conditions具有多个条件的三元运算符
【发布时间】:2016-11-02 21:00:31
【问题描述】:

您好,我正在尝试正确格式化三元运算符以在 php 中使用多个条件:

$result = ($var !== 1 || $var !== 2) ? '' : 'default';

问题是,在这种格式下,即使 $var 是 1 或 2,我也总是不正确。在一个条件下,例如 $var == 0 它工作正常。欢迎任何帮助。

【问题讨论】:

  • 您是在比较字符串吗?试试$var !== '1'(带引号)或$var != 1
  • 如果$var 等于1,它永远不会等于2 并返回。你不想&&吗?
  • 试试 $result = ($var !== 1) ? ' ' : (($var !== 2) ? ' ' : 'default')
  • 哦,仅供参考,这与三元运算符本身无关。我们会通过 if - else 语句得到相同的行为(因为这更像是一个逻辑问题)
  • 你也可以使用$result = in_array($var, [1, 2]) ? 'default' : '';。如果您最终需要检查更多条件,我建议您不要添加更多 &&||

标签: php conditional


【解决方案1】:

此语句将始终true

($var !== 1 || $var !== 2)

因为$var 不可能同时是两个值,所以它总是至少是两个值之一。满足|| 运算符。

如果您想知道$var 是否是这两个值之一:

($var === 1 || $var === 2)

如果您想知道$var 是否是两个值中的都不,您可以否定条件:

(!($var === 1 || $var === 2))

或者单独否定条件中的运算符并使用&&而不是||(因为需要满足所有条件来证明否定,而不是只满足一个条件来证明肯定):

($var !== 1 && $var !== 2)

取决于可读性和个人喜好。

【讨论】:

  • “这句话永远是正确的:($var !== 1 || $var !== 2)。即使没有定义 $var 也是如此:https://3v4l.org/kQHE0 xD
【解决方案2】:

如果 $var 为 0 , $result 为“默认”,但 1 和 2 进入条件,两者都不同,总是进入。

$result = ($var !== 1 && $var !== 2) ? '' : 'default';

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 1970-01-01
    • 2012-09-14
    • 2013-06-06
    • 2011-06-26
    • 2013-01-14
    • 2015-08-29
    • 1970-01-01
    • 2020-05-18
    相关资源
    最近更新 更多