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 に答える