键降序和值升序的排序数组

时间:2019-03-11 10:27:51

标签: php arrays

我有一个像这样的数组:

$numbers = [20, 2, 248, 992, 42]

我想计算highestlowest数字之间的差。例如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是正确的方法?

0 个答案:

没有答案