-1

重複の可能性:
次の PHP 多次元配列をソートするには?

次の配列があるとしましょう:

Array
    (
        [0] => Array
            (
                [id] => 5
                [name] => Education
                [parent] => 1
                [sort_order] => 3
                [leaf] => 1
            )

        [1] => Array
            (
                [id] => 6
                [name] => Computers
                [parent] => 1
                [sort_order] => 1
                [leaf] => 1
            )

        [2] => Array
            (
                [id] => 7
                [name] => Science
                [parent] => 1
                [sort_order] => 2
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 8
                                [name] => Mathematics
                                [parent] => 7
                                [sort_order] => 2
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 11
                                                [name] => Geometry
                                                [parent] => 8
                                                [sort_order] => 2
                                                [leaf] => 1
                                            )

                                        [1] => Array
                                            (
                                                [id] => 12
                                                [name] => Algebra
                                                [parent] => 8
                                                [sort_order] => 1
                                                [leaf] => 1
                                            )

                                    )

                            )

                        [1] => Array
                            (
                                [id] => 9
                                [name] => Physics
                                [parent] => 7
                                [sort_order] => 1
                                [leaf] => 1
                            )

                        [2] => Array
                            (
                                [id] => 10
                                [name] => Biology
                                [parent] => 7
                                [sort_order] => 4
                                [leaf] => 1
                            )

                        [3] => Array
                            (
                                [id] => 13
                                [name] => History
                                [parent] => 7
                                [sort_order] => 3
                                [leaf] => 1
                            )

                    )

            )

この配列を'sort_order'値ごとに各レベルで個別にソートする PHP 組み込み関数はありますか? いくつかの解決策を見つけましたが、それらはすべてアルファベット順にソートされているか、ksort() を使用しています。

おそらく再帰が必要になるでしょうが、それを開始する方法について助けが必要です。ティア。

4

1 に答える 1

0

1 つあります。usortこれにより、比較関数を構成できます。

1 レベルの並べ替え

比較関数とは?2 つの引数を取り、最初の引数が 2 番目の引数よりも小さい場合は -1 を返し、最初の引数が大きい場合は +1 を返し、両方が等しい場合は 0 を返します。

関数を定義するには?

機能性をもたらす組み込み関数または個人関数がある場合は、関数名を表す文字列がポイントです。

オブジェクトのメソッドの場合は、インスタンスとメソッド名を参照する配列を使用する必要があります

少なくとも、次のような無名関数を使用できます。

function sortALevel(&$array){

usort($array,function($a,$b){
     if($a['sort_order'] > $b['sort_order']){
       return 1;
     }
     if($a['sort_order'] < $b['sort_order']){
       return -1;
     }
     return 0;

  });
  }

配列全体をソートする

function sort_recursive($array){ 
sortALevel($array);
foreach($array as $value){
   if(is_array($value)){

     sort_recursive($value);
   }
}
}
于 2012-12-01T15:44:05.403 に答える