如何按特定字段排列多个数组



我有一个数组,里面有多个数组。我试图将这些数组从最大到最小的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");

我用错这个函数了吗?或者我应该采取其他方法吗?

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");

在这种情况下,您可能希望使用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;
    }
});

最新更新