首页 > 解决方案 > 有没有办法重构多个相似的 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];

我真正想要的是,如果有办法让三元返回一个真假值数组。像这样的虚构代码:

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

标签: php

解决方案


我相信没有函数你能做的最短的就是这个,但仍然有很多重复:

[$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);

推荐阅读