0

以下で説明するように、キーラベル(キー値ではなく)で順序付けする必要がある単純なマルチ配列があります。

array(
    1 => array(
        2 => array();
        11 => array();
        20 => array();
        31 => array();
        4 => array();
        43 => array();
        12 => array();
        3 => array();
    );
    2 => array();
    11 => array();
    20 => array();
    31 => array();
    4 => array();
    43 => array();
    12 => array();
    3 => array(); );

問題は、私の注文が次のように注文された配列を返すことです:

1, 11, 12, 2, 20, 3, 31,など...そしてそうではありません1,2,3,4,11,12,..

これは私の注文関数です:

private function orderByKey(&$array) {
        ksort($array);
        foreach($array as $value) {
            if (is_array($value)) {
                $this->orderByKey($value);
            }
        }
    }

ここで何が問題なのですか?

ありがとう。

4

6 に答える 6

4

$array のエントリへの参照として $value にアクセスする必要があります

private function orderByKey(&$array) {
        ksort($array);
        foreach($array as &$value) {
            if (is_array($value)) {
                $this->orderByKey($value);
            }
        }
    }
于 2013-04-09T13:20:37.643 に答える
1

サブ配列をソートしないことに加えて、質問で概説した順序でキーをソートするのに問題があるという質問も読みました(1, 11, 12, 2, 20, 3, 31, ...):

uksort($array, function($a, $b) {
    return strcmp("$a ", "$b ");
});

この並べ替えでは、3 が 20 より大きく 30 より小さいように、各キーにスペースが埋め込まれます。

完全なコード:

private function orderByKey(&$array) {
    if (!is_array($array)) return;
    uksort($array, function($a, $b) {
        return strcmp("$a ", "$b ");
    });
    array_walk($array, [$this, 'orderByKey']);
}

またはksort()あなたのために働く場合:

private function orderByKey(&$array) {
    if (!is_array($array)) return;
    ksort($array);        
    array_walk($array, [$this, 'orderByKey']);
}
于 2013-04-09T14:09:35.133 に答える
1

つまり、sort() および ksort() の 2 番目のパラメータは、sort_flags です。文字列値 (現在のように見える) ではなく、数値で並べ替えたい場合は、そのパラメーターを設定する必要があります。

ksort($my_array, SORT_NUMERIC);

さまざまなソートフラグが説明されている sort() のページをチェックしてください: http://www.php.net/manual/en/function.sort.php

于 2013-04-09T13:20:44.463 に答える
1

機能を使用できnatksortます。

于 2013-04-09T13:21:01.723 に答える
0

http://www.php.net/manual/en/function.uksort.php

あなたが検索するものです。ksort の代わりに:

uksort($array, function ($a, $b) { return $a - $b; });
于 2013-04-09T13:21:20.367 に答える
0
 ksort($myarray);
 foreach ($myarray as $key => $val) {
     echo "$key = $val\n";
 }
于 2013-04-09T13:22:31.010 に答える