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
                (
                )

        )



)

伙计们,我想对该数组的值进行排序,我想按键对其进行排序,键是“名称”。这应该通过键“名称”对第一级和第二级进行排序。

我放入的这个数组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");

上面的第一个元素 ($categories) 是您的数组,第二个元素将提供函数的名称,在本例中为“sortByName”。

之后,您只需将一个函数添加到您的代码中(放置它的位置并不重要,即使它位于页面底部):

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

基本上这个函数的作用是将你的数组与......你的数组进行比较:),这样它就可以按名称对它进行排序 - 就像你想要的那样。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

'name' 不是你真正的'Key',只是说,因为 Php 中的'key' 通常表示你的数组的名称,如数组中的 '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

无论如何,要回答您关于如何按“名称”对其进行排序的问题,请使用“usort”:

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

usort($arr,"cmp");

查看以下链接以获取更多信息: 如何按嵌套在其中的元素对 PHP 数组进行排序?

于 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 回答