php 中是否有三元运算符的反向版本?

Is there a backwards version of a ternary operator in php?

如果条件为真,我正在尝试为一个数组分配一些值,否则我想将它分配给另一个数组。我知道这可以通过 if 语句实现。但是,我想知道是否可以用三元运算符的语法来完成?

使用 if 语句看起来像这样

        if(condition){
            $foo[] = $value;
        } else{
            $bar[] = $value;
        }

但是,我的问题是是否可以这样写?

        ((condition) ? ($foo[]) : ($bar[])) = $value;

这样的语句只会导致语法错误或致命错误:

(true ? $foo : $bar)[] = 42;
// Fatal error: Cannot use temporary expression in write contex

您也可以尝试参考,但仍然无效:

$arr = true ? &$foo : &$bar;
$arr[] = 42;
// Parse error: syntax error, unexpected token "&"

if 语句可能是您的最佳选择。但是,如果你真的想做这样的事情,你可以使用一个关联数组 foobar 只是键:

$arr = [
    'foo' => [],
    'bar' => [],
];

$arr[true ? 'foo' : 'bar'][] = 42;

可以,但与您想要的方式略有不同,如下所示:

  • 第一种方法是在每个三元块中赋值。

    true ? ($foo[] = $value) : ($bar[] = $value);
    

Online Demo

  • 第二种方法是使用 array_push,如下所示:

    array_push(${ true ? 'foo' : 'bar' }, $value);
    

Online Demo

注意:true替换为您的条件。

试试这个。

condition ? ($foo[] = $value) : ($bar[] = $value);