Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法重构多个类似的PHP ternaries?_Php - Fatal编程技术网

有没有办法重构多个类似的PHP ternaries?

有没有办法重构多个类似的PHP ternaries?,php,Php,我有一些代码,感觉里面有很多重复。我把它归结到下面的部分,但我仍然看到一些东西被重复,感觉应该有一个更干净的方法来写它。还有什么可以做的吗?或者就是这样 $w1 = ($fin[57] > $fin[60]) ? $tc[57] : $tc[60]; $l1 = ($fin[57] > $fin[60]) ? $tc[60] : $tc[57]; $w2 = ($fin[58] > $fin[59]) ? $tc[58] : $tc[59]; $l2 = ($fin[58] &

我有一些代码,感觉里面有很多重复。我把它归结到下面的部分,但我仍然看到一些东西被重复,感觉应该有一个更干净的方法来写它。还有什么可以做的吗?或者就是这样

$w1 = ($fin[57] > $fin[60]) ? $tc[57] : $tc[60];
$l1 = ($fin[57] > $fin[60]) ? $tc[60] : $tc[57];
$w2 = ($fin[58] > $fin[59]) ? $tc[58] : $tc[59];
$l2 = ($fin[58] > $fin[59]) ? $tc[59] : $tc[58];
我真正想要的是,是否有一种方法可以让三元数返回一个真值和假值数组。类似于这个虚构的代码:

list($w1, $l1) = (array) ($fin[57] > $fin[60]) ? $tc[57] : $tc[60];
list($w2, $l2) = (array) ($fin[58] > $fin[59]) ? $tc[58] : $tc[59];

您可以使用
list
使其更好一些:

$order = function ($i1, $i2) use ($fin, $tc) {
    $r = [$tc[$i1], $tc[$i2]];
    if ($fin[$i2] > $fin[$i1]) $r = array_reverse($r);
    return $r;
};
list($w1, $l1) = $order(57, 60);
list($w2, $l2) = $order(58, 59);

我相信没有函数的情况下最短的时间是这样的,但仍然有相当多的重复:

[$w1, $l1] = $fin[57] > $fin[60] ? [$tc[57], $tc[60]] : [$tc[60], $tc[57]];
如果您正在使用PHP 7.4的短闭包,也可以使用它来实现一个非常小的函数(PHP<7.4版本更接近于另一个答案):

用法:

[$w1, $l1] = $wlValues(57, 60);

更多的上下文将有助于这一点。我们能看到这个算法应该解决的更大的问题吗?也许一种完全不同的方法可能会使这些线条完全过时。@deceze-在这个
$fin
代表游戏方id#57等的最终得分。
$tc
代表一个团队在该方比赛的id(将“方”视为“主场”或“客场”)。所以在赛程表上有一场比赛,57打60。获得#57位置的团队被分配
$tc[57]
。该游戏获胜者的团队id被分配给
$w1
变量。不确定这种解释是否有帮助或使之更加混乱。最终,w1美元的球队将进入游戏方id#61。但这对这个问题来说可能并不重要。如果这两个变量不是全局的,那会怎么样?@deceze它本来是要展示这个想法的,但现在应该是固定的。嗯,如果我有很多例子,这个想法可能是好的,但我只有两个比较要做。我只是编辑了我的问题,以显示我希望得到的答案的伪代码。@DanGoodspeed我认为没有比这更简短的方法了。
[$w1, $l1] = $wlValues(57, 60);