【问题标题】:PHP multiple comparison conditions in one line一行PHP多重比较条件
【发布时间】:2020-10-29 20:20:57
【问题描述】:

我有一个字符串的定义:

$string = $string1 .' / '.$string2.' / '.$string3;

是否可以将所有字符串写成一行条件,如果不存在,写“0”?

if (!string1) {$string1="0";}
if (!string2) {$string2="0";}
if (!string3) {$string3="0";}

我尝试了类似的方法:

$string = !$string1 ? "0" : $string1.' / '.!$string2 ? "0" : $string2.' / '.!$string3 ? "0": $string3;

但是这种方式是行不通的。

我也试过了?? :

$string = $string1 ?? "0" .' / '.$string2 ?? "0" .' / '.$string3 ?? "0";

【问题讨论】:

  • 如果它们不存在,因为它们没有被声明?
  • 是的,在这种情况下我需要显示“0”。而且我不想在开始时将它们定义为“0”,我需要在那一行解决它
  • 你能定义“不工作”吗?您是否收到错误、不正确的结果等。您使用的是什么版本的 PHP。对于三元,您需要对表达式进行分组,它也是不可读的,并且在 PHP 手册中建议不要使用 (It is recommended that you avoid "stacking" ternary expressions. PHP's behaviour when using more than one ternary operator within a single statement is non-obvious)
  • ($string1 ?? 0) .'/'. ($string2 ?? 0). '/'. ($string3 ??0)
  • 太棒了!我只是错过了括号,现在它正在以这种方式工作 ($string1 ?? 0) .'/'。 ($string2 ?? 0)。 '/'。 ($string3 ?? 0)。谢谢@nice_dev

标签: php comparison-operators


【解决方案1】:

您的最后一次尝试非常接近,但是您对三元运算符的使用需要在每个测试周围加上括号才能正常工作。

$string = ($string1 ?? "0") .' / '. ($string2 ?? "0") .' / '. ($string3 ?? "0");

【讨论】:

  • 是的,这种带括号的方式最终可以按照 nice_dev 的建议工作。谢谢
【解决方案2】:

这两种方法都可以

我做了一些小改动,你的两个语句在添加圆括号后都可以正常工作。

$string = (!$string1 ? "0" : $string1).' / '.(!$string2 ? "0" : $string2).' / '.(!$string3 ? "0": $string3); 
$string = ($string1 ?? "0") .' / '. ($string2 ?? "0") .' / '. ($string3 ?? "0");

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2022-12-18
    相关资源
    最近更新 更多