0
Array
(
    [12] => Array
        (
            [id] => 12
            [name] => Car
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 14
                            [name] => Volvo
                        )

                    [1] => Array
                        (
                            [id] => 15
                            [name] => Mercedes-Benz
                        )

                )

        )

    [13] => Array
        (
            [id] => 13
            [name] => Manga
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 16
                            [name] => Naruto
                        )

                    [1] => Array
                        (
                            [id] => 17
                            [name] => Hunter X Hunter
                        )

                )

        )

    [18] => Array
        (
            [id] => 18
            [name] => aa
            [children] => Array
                (
                )

        )



)

この配列の値を並べ替えたいのですが、キーで並べ替えたいのですが、キーは「名前」です。これにより、最初のレベルと 2 番目のレベルがキー「name」でソートされます。

この配列を入れたprint_r()ので、このようになります。配列は修正されていないので、将来追加できます。

したがって、並べ替え後の配列の最終値は...

Array
(

    [18] => Array
        (
            [id] => 18
            [name] => aa
            [children] => Array
                (
                )

        )

    [12] => Array
        (
            [id] => 12
            [name] => Car
            [children] => Array
                (
            [0] => Array
                        (
                            [id] => 15
                            [name] => Mercedes-Benz
                        )

                    [1] => Array
                        (
                            [id] => 14
                            [name] => Volvo
                        )

            )

        )

    [13] => Array
        (
            [id] => 13
            [name] => Manga
            [children] => Array
                (
            [0] => Array
                        (
                            [id] => 17
                            [name] => Hunter X Hunter
                        )

                    [1] => Array
                        (
                            [id] => 16
                            [name] => Naruto
                        )

                )

        )
)



そして、これはコードの配列です。

$categories = array(
                12 => 
                    array('id' =>12, 
                              'name' => 'Car',
                                       'children' => 
                                        array(
                                            array('id' => 14,
                                                      'name' => 'volvo'
                                            )
                                        ),
                                        array(
                                            array('id' => 15,
                                                      'name' => 'Mercedez-Benz'
                                            )
                                        )
                            ),

                13 => 
                    array('id' =>13, 
                              'name' => 'Manga',
                                       'children' => 
                                        array(
                                            array('id' => 16,
                                                      'name' => 'Naruto'
                                            )
                                        ),
                                        array(
                                            array('id' => 17,
                                                      'name' => 'Hunter X Hunter'
                                            )
                                        )
                            ),

                18=>
                    array('id' => 18, 
                              'name'=> 'aa', 
                                      'children' => array())


                );

echo "<pre>";

print_r($categories);
4

3 に答える 3

0

それで、

私はあなたにそれをよりよく説明しようとします

配列は大きいですが、キー値'[name]'でのみソートする必要があります。私のテストでは、提供されたアレイを使用しました。

$categories = array(
            12 => 
                array('id' =>12, 
                          'name' => 'Car',
                                   'children' => 
                                    array(
                                        array('id' => 14,
                                                  'name' => 'volvo'
                                        )
                                    ),
                                    array(
                                        array('id' => 15,
                                                  'name' => 'Mercedez-Benz'
                                        )
                                    )
                        ),

            13 => 
                array('id' =>13, 
                          'name' => 'Manga',
                                   'children' => 
                                    array(
                                        array('id' => 16,
                                                  'name' => 'Naruto'
                                        )
                                    ),
                                    array(
                                        array('id' => 17,
                                                  'name' => 'Hunter X Hunter'
                                        )
                                    )
                        ),

            18=>
                array('id' => 18, 
                          'name'=> 'aa', 
                                  'children' => array())


            );

配列が宣言されている場合は、次のようにusortを追加できます。

usort($categories,"sortByName");

上記の最初の要素($ category)は配列であり、2番目の要素は関数の名前(この場合は'sortByName')を提供します。

その後、コードに関数を追加するだけです(ページの下部にある場合でも、どこに関数を配置してもかまいません)。

function sortByName($categories, $b) {
    return strcasecmp($categories["name"], $b["name"]);
}

基本的に、この関数が行うことは、配列を... your array :)と比較することです。これにより、必要に応じて、名前でアルファベット順に並べ替えることができます。sthe'strcasecmp'は、文字列を相互に比較して並べ替えます。これは大文字と小文字を区別しないというわけではありません(strcmpも大文字と小文字を区別します)。大文字などもチェックしたくないと思います。そうしないと、期待どおりの結果が得られません。

そのコードを追加すると、配列を再度出力できます。

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

結果は次のようになります。

Array
(
[0] => Array
    (
        [id] => 18
        [name] => aa
        [children] => Array
            (
            )

    )

[1] => Array
    (
        [id] => 12
        [name] => Car
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 14
                        [name] => volvo
                    )

            )

        [0] => Array
            (
                [0] => Array
                    (
                        [id] => 15
                        [name] => Mercedez-Benz
                    )

            )

    )

[2] => Array
    (
        [id] => 13
        [name] => Manga
        [children] => Array
            (
                [0] => Array
                    (
                        [id] => 16
                        [name] => Naruto
                    )

            )

        [0] => Array
            (
                [0] => Array
                    (
                        [id] => 17
                        [name] => Hunter X Hunter
                    )

            )

    )

これがあなたが望んでいたことだといいのですが。:-)

于 2012-11-27T14:10:19.843 に答える
0

Php の「キー」は通常、配列の「18」や「12」などのように、配列の名前を意味するため、「名前」は実際の「キー」ではありません。

<?php
    $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
    ksort($fruits);
    foreach ($fruits as $key => $val) {
        echo "$key = $val\n";
    }
?>

この例では、結果は次のようになります。

a = orange
b = banana
c = apple
d = lemon

とにかく、「name」でソートする方法についての質問に答えるには、「usort」を使用します。

function cmp($a, $b) {
   return $a['name'] - $b['name'];
}

usort($arr,"cmp");

詳細については、次のリンクを参照してください: How do I sort a PHP array by an element nested inside?

于 2012-11-27T13:26:44.857 に答える
0

PHP 5.3+を使用している場合、コードでクロージャーを使用して、このように並べ替えることができます

usort($categories,function($a,$b){
    return $a['name'] - $b['name']
}
于 2012-11-27T13:28:51.130 に答える