我有一个像这样的数组:
$numbers = [20, 2, 248, 992, 42]
我想计算highest
和lowest
数字之间的差。例如248
应该是8 - 2 = 6
(最高为8,最低为2)。另一个示例:992 = 9 -2 = 7
(再次,最高-最低)。
因此,我想根据上述数学上的差异,以正确的顺序输出输入数组。
举一个完整的例子:
输入数组:$numbers = [20, 2, 248, 992, 42]
数学:
20 = 2 - 0 = 2 *
2 = 2 - 2 = 0
248 = 8 - 2 = 6
992 = 9 - 2 = 7
42 = 4 - 2 = 2 *
输出数组:2, 42, 20, 248, 992
(由于42个字符位于输入数组字符的20个字符之后 ,
到目前为止,我尝试了以下操作:
function digitDifferenceSort($a) {
$out = array();
foreach($a as $z) {
$number = str_split($z);
sort($number);
// substract the biggest minus the smallest
$diff = $number[max(array_keys($number))] - $number[0];
$out[] = $diff;
}
// format again
asort($out);
// iterate through the reordered out-array and get the values
$reorderedArray = array();
foreach($out as $k => $reordered) {
$reorderedArray[] = $a[$k];
}
}
“到目前为止,效果很好”,但是如果再次出现相同的问题,则会遇到上述问题。也许asort()
在这里不正确吗?也许usort是正确的方法?