我有一些代码,觉得其中有很多重复之处。我将其归结为以下内容,但是我仍然看到一些重复的事情,感觉应该有一种更简洁的编写方法。还有什么可以做的吗?
$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];
我真正想要的是是否有一种方法来使三元数返回true和false值的数组。像这样的虚拟代码:
list($w1, $l1) = (array) ($fin[57] > $fin[60]) ? $tc[57] : $tc[60];
list($w2, $l2) = (array) ($fin[58] > $fin[59]) ? $tc[58] : $tc[59];
答案 0 :(得分:1)
您可以使用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);
答案 1 :(得分:1)
我相信没有功能您可以做的最短的事情就是这个,但是仍然有很多重复:
[$w1, $l1] = $fin[57] > $fin[60] ? [$tc[57], $tc[60]] : [$tc[60], $tc[57]];
如果您正在使用PHP 7.4的简短闭包,您也可以执行一个非常小的功能(PHP <7.4版本更接近另一个答案):
$wlValues = fn($i, $j) => $fin[$i] > $fin[$j] ? [$tc[$i], $tc[$j]] : [$tc[$j], $tc[$i]];
用法:
[$w1, $l1] = $wlValues(57, 60);