简体   繁体   English

通过键在php中递归排序多维数组的函数

[英]Function to sorting recursively a multidimensional array in php by key

I have an array of categories and I would like to create a function to sort them by passing a parameter, which the function uses to sort the array. 我有一个类别数组,我想创建一个函数以通过传递参数来对它们进行排序,该函数用于对数组进行排序。

the array I have is like this: 我拥有的数组是这样的:

Array
(
    [1] = Array
        (
            [id] = 1
            [name] = categoryName1
            [parent] = 0
            [sorting] = 1
            [0] = Array
                (
                    [id] = 6
                    [name] = categoryName6
                    [parent] = 1
                    [sorting] = 3
                )

            [1] = Array
                (
                    [id] = 4
                    [name] = categoryName4
                    [parent] = 1
                    [sorting] = 2
                )

            [2] = Array
                (
                    [id] = 3
                    [name] = categoryName3
                    [parent] = 1
                    [sorting] = 1
                    [0] = Array
                        (
                            [id] = 5
                            [name] = categoryName5
                            [parent] = 3
                            [sorting] = 1

                        )

                )

        )

    [2] = Array
        (
            [id] = 2
            [name] = categoryName2
            [parent] = 0
            [sorting] = 2
        )

)

I tried with array_multisort like this: 我试过这样的array_multisort:

    function recursive_sort(&$array, $sort_key) {
        foreach ( $array as $k => &$v ) {
            if (is_array($v)) {
                recursive_sort( $v, $sort_key );
            }
        }
        return array_multisort(array_column($array,$sort_key), SORT_ASC, $array);
    }

    recursive_sort($sorted_categories, 'sorting');

but I am getting this error: 但我收到此错误:

array_multisort(): Array sizes are inconsistent array_multisort():数组大小不一致

I expect the output: 我期望输出:

Array
(
    [1] = Array
        (
            [id] = 1
            [name] = categoryName1
            [parent] = 0
            [sorting] = 1
            [0] = Array
                (
                    [id] = 3
                    [name] = categoryName3
                    [parent] = 1
                    [sorting] = 1
                    [0] = Array
                        (
                            [id] = 5
                            [name] = categoryName5
                            [parent] = 3
                            [sorting] = 1

                        )

                )

            [1] = Array
                (
                    [id] = 4
                    [name] = categoryName4
                    [parent] = 1
                    [sorting] = 2
                )

            [2] = Array
                (
                    [id] = 6
                    [name] = categoryName6
                    [parent] = 1
                    [sorting] = 3
                )

        )

    [2] = Array
        (
            [id] = 2
            [name] = categoryName2
            [parent] = 0
            [sorting] = 2
        )

)

with this function: 具有此功能:

recursive_sort($sorted_categories, 'sorting');

I understood why i can't sort the array properly ... the child categories must be agglomerated inside a key (such as "child") like this: 我知道为什么我不能正确地对数组进行排序……子类必须在键(例如“子”)中聚集在一起,如下所示:

Array
(
[1] = Array
    (
        [id] = 1
        [name] = categoryName1
        [parent] = 0
        [sorting] = 1
        [child] = Array
            (
                [0] = Array
                    (
                        [id] = 6
                        [name] = categoryName6
                        [parent] = 1
                        [sorting] = 3
                    )

                [1] = Array
                    (
                        [id] = 4
                        [name] = categoryName4
                        [parent] = 1
                        [sorting] = 2
                    )

                [2] = Array
                    (
                        [id] = 3
                        [name] = categoryName3
                        [parent] = 1
                        [sorting] = 1
                        [child] = Array
                            (
                                [0] = Array
                                    (
                                        [id] = 5
                                        [name] = categoryName5
                                        [parent] = 3
                                        [sorting] = 1
                                    )

                            )

                    )

            )

    )

[2] = Array
    (
        [id] = 2
        [name] = categoryName2
        [parent] = 0
        [sorting] = 2
    )

)

so i can sort the array with this function 所以我可以使用此功能对数组进行排序

function recursive_sort(&$array, $sort_key) {

    foreach ( $array as $k => &$v ) {
        if (is_array($v)) {
            recursive_sort( $v, $sort_key );
        }
    }

    // at least 2 elements
    if ($array[1]) {
        return array_multisort( array_column( $array, $sort_key ), SORT_DESC, $array );
    }
}
recursive_sort($sorted_categories, 'id');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM