-2

重複の可能性:
値に基づいて配列をソートする

配列をその中の値でソートしたい。試してみusortましたが、配列内の要素をシフトするだけでなく、実際に出力の値を変更するという予期しない結果につながります。

以下は、並べ替えたい配列です。

Array
(
[element1] => Array
    (
        [Total] => 1
        [paTotal] => 0
        [totalPreregistrations] => 7
        [totalPreregistrationsToDate] => 26
        [pas] => Array
            (
                [0] => Array
                    (
                        [id] => 119
                    )

            )

    )

[element2] => Array
    (
        [Total] => 1
        [paTotal] => 0
        [totalPreregistrations] => 0
        [totalPreregistrationsToDate] => 58
        [pas] => Array
            (
                [0] => Array
                    (
                        [id] => 107
                    )

            )

    )
... element3, 4, etc...

「totalPreregistrations」の数でソートして、element2 の totalPreregistrations カウントが element1 を上回った場合に element2 が element1 を上回るようにしたいと考えています。

もちろん、サブアレイも保持したいと思います。

ありがとうございました!

4

2 に答える 2

2

ドキュメンテーション:uasort()

function mySort($a, $b) {
  if( $a['totalPreregistrations'] == $b['totalPreregistrations'] ) {
    return 0;
  } else if( $a['totalPreregistrations'] > $b['totalPreregistrations'] ) {
    return 1;
  } else {
    return -1;
  }
}

uasort($array, 'mySort');
于 2012-10-25T16:12:44.820 に答える
1

uasort代わりに使用できますusort

uasort($array, function ($a, $b) {
    $a = $a['totalPreregistrations'];
    $b = $b['totalPreregistrations'];
    return ($a == $b) ? 0 : (($a < $b) ? -1 : 1);
});


echo "<pre>";
print_r($array);

出力

Array
(
    [element2] => Array <-------------------------- element key remains intact 
        (
            [Total] => 1
            [paTotal] => 0
            [totalPreregistrations] => 0
            [totalPreregistrationsToDate] => 58
            [pas] => Array
                (
                    [0] => Array
                        (
                            [id] => 107
                        )

                )

        )

    [element1] => Array
        (
            [Total] => 1
            [paTotal] => 0
            [totalPreregistrations] => 7
            [totalPreregistrationsToDate] => 26
            [pas] => Array
                (
                    [0] => Array
                        (
                            [id] => 119
                        )

                )

        )

)
于 2012-10-25T16:20:40.703 に答える