通过单个键对数组内的数组进行排序

时间:2015-05-22 10:19:04

标签: php arrays

我应该解释为什么我的问题是独一无二的:我的问题是独一无二的,因为提出的解决方案适用于数组的第一个实例,但我想知道如何使用它来处理下一个数组。 THX

我的PHP数组$ kategorien:

Array
(
    [0] => Array
        (
            [order] => 0
            [id] => 1
            [name] => Other
        )

    [1] => Array
        (
            [order] => 1
            [id] => 5652372018
            [name] => Templates & Addons
            [sub] => Array
                (
                    [0] => Array
                        (
                            [order] => 1
                            [id] => 13989101018
                            [name] => deutsch
                            [sub] => Array
                                (
                                    [0] => Array
                                        (
                                            [order] => 0
                                            [id] => 16694354018
                                            [name] => hübsch
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [order] => 0
                            [id] => 13989102018
                            [name] => english
                        )

                )

        )

    [2] => Array
        (
            [order] => 0
            [id] => 13989097018
            [name] => Domains
        )

    [3] => Array
        (
            [order] => 2
            [id] => 15403616018
            [name] => Service
        )

)

我可以使用

按“order”对此数组进行排序
function sortiere($a, $b)
          {
            return strcmp($a['order'], $b['order']);
          }
        usort($kategorien, 'sortiere')

foreach ($kategorien as $key => $row) {
            $order[$key]    = $row['order'];                
        }
        array_multisort($order, SORT_ASC, $kategorien);

两件作品都得到了

    order - 0
    id - 1
    name - Other

    order - 0
    id - 13989097018
    name - Domains

    order - 1
    id - 5652372018
    name - Templates & Addons

            order - 1
            id - 13989101018
            name - deutsch

                    order - 0
                    id - 16694354018
                    name - hübsch

            order - 0
            id - 13989102018
            name - english

    order - 2
    id - 15403616018
    name - Service

但是我无法对下一个数组进行排序。我需要通过“订单”进行相同的排序:

    order - 0
    id - 1
    name - Other

    order - 0
    id - 13989097018
    name - Domains

    order - 1
    id - 5652372018
    name - Templates & Addons

            order - 0          <------------------
            id - 13989102018
            name - english

            order - 1          <-------------------
            id - 13989101018
            name - deutsch

                    order - 0
                    id - 16694354018
                    name - hübsch

    order - 2
    id - 15403616018
    name - Service

如何将工作函数用于下一个数组?谢谢!

1 个答案:

答案 0 :(得分:3)

我会创建一个递归函数,如果[sub]存在,将对一个级别进行排序并在下一级别重新调用,依此类推。

以下是我的解决方案,它将按order值对所有级别的所有数组进行排序:

<强>代码

function sortiere($a, $b) { return strcmp($a['order'], $b['order']); }
function sort_by_order(&$arr) {
    usort($arr, 'sortiere');
    foreach ($arr as $k => $c) {
       if (isset($c['sub'])) {
           sort_by_order($arr[$k]['sub']);
       }
    }
    return;
}

用法:

$arr = Array(
    /* the array with the specific structure as you showed */ 
);
sort_by_order($arr);
print_r($arr);

<强>演示:

online demo