【问题标题】:Sort multidimensional array recursive by specific key按特定键对多维数组进行递归排序
【发布时间】:2015-02-02 19:49:16
【问题描述】:

我正在尝试通过它的标签对该数组进行递归排序:

Array
(
    [0] => Array
        (
            [id] => 6
            [label] => Bontakt
            [children] => Array
                (
                )

        )

    [1] => Array
        (
            [id] => 7
            [label] => Ampressum
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 5
                            [children] => Array
                                (
                                )

                            [label] => Bome
                        )

                    [1] => Array
                        (
                            [id] => 8
                            [children] => Array
                                (
                                )

                            [label] => Aome
                        )

                    [2] => Array
                        (
                            [id] => 10
                            [children] => Array
                                (
                                )

                            [label] => Come
                        )

                )

        )

    [2] => Array
        (
            [id] => 9
            [label] => Contakt
            [children] => Array
                (
                )

        )

    [3] => Array
        (
            [id] => 11
            [label] => Dead
            [children] => Array
                (
                )

        )

)

我已经阅读了几个问题,并且感觉非常接近,但我无法弄清楚什么不起作用:

function sortByAlpha($a, $b)
{
    return strcmp(strtolower($a['label']), strtolower($b['label'])) > 0;
}

function alphaSort(&$a)
{
    foreach ($a as $oneJsonSite)
    {
        if (count($oneJsonSite["children"]) > 0) alphaSort($oneJsonSite["children"]);
    }

    usort($a, 'sortByAlpha');
}


alphaSort($jsonSites);

当前输出是这样的:

Ampressum
    Bome
    Aome
    Come
Bontakt
Contakt
Dead

子元素未排序...

【问题讨论】:

  • @MikeBrant 仔细看看函数 alphaSort ;-)
  • 抱歉我错过了:)

标签: php arrays recursion multidimensional-array


【解决方案1】:

看看这个:

为了能够直接修改循环内的数组元素,在$value前加上&。在这种情况下,值将通过引用分配。 (摘自这里:http://php.net/manual/en/control-structures.foreach.php

你应该试试这个:

function alphaSort(&$a)
{
    foreach ($a as &$oneJsonSite)
    {
        if (count($oneJsonSite["children"]) > 0) alphaSort($oneJsonSite["children"]);
    }

    usort($a, 'sortByAlpha');
}

【讨论】:

  • 谢谢,效果很好!介意我用工作代码编辑你的答案吗?
最近更新 更多