有没有一种方法可以重构多个相似的PHP三元组?

时间:2019-12-21 06:01:50

标签: 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] > $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];

2 个答案:

答案 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);