函数按键递归排序php中的多维数组

函数按键递归排序php中的多维数组,php,arrays,sorting,Php,Arrays,Sorting,我有一个类别数组,我想创建一个函数,通过传递一个参数对它们进行排序,函数使用该参数对数组进行排序 我拥有的阵列如下所示: Array ( [1] = Array ( [id] = 1 [name] = categoryName1 [parent] = 0 [sorting] = 1 [child] = Array ( [0] = Array

我有一个类别数组,我想创建一个函数,通过传递一个参数对它们进行排序,函数使用该参数对数组进行排序

我拥有的阵列如下所示:

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
    )
数组
(
[1] =数组
(
[id]=1
[名称]=类别名称1
[父项]=0
[排序]=1
[0]=数组
(
[id]=6
[名称]=类别名称6
[家长]=1
[排序]=3
)
[1] =数组
(
[id]=4
[名称]=类别名称4
[家长]=1
[排序]=2
)
[2] =数组
(
[id]=3
[名称]=类别名称3
[家长]=1
[排序]=1
[0]=数组
(
[id]=5
[名称]=类别名称5
[家长]=3
[排序]=1
)
)
)
[2] =数组
(
[id]=2
[名称]=类别名称2
[父项]=0
[排序]=2
)
)
我尝试使用数组_multisort,如下所示:

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
    )
函数递归排序(&$array,$sort\u key){
foreach($k=>&$v数组){
if(is_数组($v)){
递归排序($v,$sort\u key);
}
}
返回array\u multisort(array\u列($array,$sort\u键),sort\u ASC,$array);
}
递归排序($sorted_categories,'sorting');
但我得到了这个错误:

数组\ u multisort():数组大小不一致

我预计产出:

数组
(
[1] =数组
(
[id]=1
[名称]=类别名称1
[父项]=0
[排序]=1
[0]=数组
(
[id]=3
[名称]=类别名称3
[家长]=1
[排序]=1
[0]=数组
(
[id]=5
[名称]=类别名称5
[家长]=3
[排序]=1
)
)
[1] =数组
(
[id]=4
[名称]=类别名称4
[家长]=1
[排序]=2
)
[2] =数组
(
[id]=6
[名称]=类别名称6
[家长]=1
[排序]=3
)
)
[2] =数组
(
[id]=2
[名称]=类别名称2
[父项]=0
[排序]=2
)
)
使用此功能:

recursive_sort($sorted_categories,'sorting');

我明白为什么我不能正确排序数组。。。子类别必须聚集在一个键(如“child”)内,如下所示:

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

所以我可以用这个函数对数组进行排序

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');

我明白为什么我不能正确排序数组。。。子类别必须聚集在一个键(如“child”)内,如下所示:

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

所以我可以用这个函数对数组进行排序

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');

无论谁回答这个问题,我都在看着你:D!所以,最后我回答自己:)我希望它对其他用户也有用!无论谁回答这个问题,我都在看着你:D!所以,最后我回答自己:)我希望它对其他用户也有用!