0

我有一个数组,里面有多个数组。我正在尝试将这些数组从最大到最小 new_sales 排列。以下是大约 40 个数组的数组示例:

Array
(
    [0] => Array
        (
            [Tech] => Array
                (
                    [first_name] => Anthony
                    [last_name] => Bisignano
                )

            [0] => Array
                (
                    [new_sales] => 21
                    [upgrades] => 2
                )

        )

    [1] => Array
        (
            [Tech] => Array
                (
                    [first_name] => Arnold
                    [last_name] => Ybanez
                )

            [0] => Array
                (
                    [new_sales] => 5
                    [upgrades] => 0
                )

        )

我尝试使用的功能如下:

function aasort (&$techs, $key) {
    $sorter=array();
    $ret=array();
    reset($techs);
    foreach ($techs as $ii => $va) {
        $sorter[$ii]=$va[$key];
    }
    asort($sorter);
    foreach ($sorter as $ii => $va) {
        $ret[$ii]=$techs[$ii];
    }
    $techs=$ret;
    }

    aasort($test,"new_sales");

我是否使用了错误的功能或者我应该采取其他方法?

4

2 回答 2

0

PHP 中有一些排序函数支持用户定义的比较方法。像这样的代码应该可以帮助您开始使用它。

function cmp($a, $b)
{
    if ($a[0]['new_sales'] == $b[0]['new_sales']) {
        return 0;
    }
    return ($a[0]['new_sales'] < $b[0]['new_sales']);
}
usort($data, "cmp");
于 2013-02-08T16:45:05.287 回答
0

在这种情况下,您可能希望使用usort()这样您可以定义您的排序逻辑。

所以是这样的:

usort($array, function($a, $b) {
    if ($a[0]['new_sales'] > $b[0]['new_sales']) {
        return -1; // note we use -1 here because we want a reverse sort
    } else if ($a[0]['new_sales'] < $b[0]['new_sales']) {
        return 1;
    } else {
        return 0;
    }
});
于 2013-02-08T16:46:39.790 回答