-1

可能重复:
如何对以下 PHP 多维数组进行排序?

假设我有以下数组:

Array
    (
        [0] => Array
            (
                [id] => 5
                [name] => Education
                [parent] => 1
                [sort_order] => 3
                [leaf] => 1
            )

        [1] => Array
            (
                [id] => 6
                [name] => Computers
                [parent] => 1
                [sort_order] => 1
                [leaf] => 1
            )

        [2] => Array
            (
                [id] => 7
                [name] => Science
                [parent] => 1
                [sort_order] => 2
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 8
                                [name] => Mathematics
                                [parent] => 7
                                [sort_order] => 2
                                [children] => Array
                                    (
                                        [0] => Array
                                            (
                                                [id] => 11
                                                [name] => Geometry
                                                [parent] => 8
                                                [sort_order] => 2
                                                [leaf] => 1
                                            )

                                        [1] => Array
                                            (
                                                [id] => 12
                                                [name] => Algebra
                                                [parent] => 8
                                                [sort_order] => 1
                                                [leaf] => 1
                                            )

                                    )

                            )

                        [1] => Array
                            (
                                [id] => 9
                                [name] => Physics
                                [parent] => 7
                                [sort_order] => 1
                                [leaf] => 1
                            )

                        [2] => Array
                            (
                                [id] => 10
                                [name] => Biology
                                [parent] => 7
                                [sort_order] => 4
                                [leaf] => 1
                            )

                        [3] => Array
                            (
                                [id] => 13
                                [name] => History
                                [parent] => 7
                                [sort_order] => 3
                                [leaf] => 1
                            )

                    )

            )

是否有任何 PHP 内置函数可以按'sort_order'值在每个级别上分别对该数组进行排序?我找到了几种解决方案,但它们都按字母顺序排序或使用了 ksort()。

可能需要递归,但我需要一些帮助如何开始。TIA。

4

1 回答 1

0

有一个:usort它允许您自定义比较功能。

排序 1 级

什么是比较函数?一个函数,接受两个参数,当第一个小于第二个时返回 -1,当第一个大于时返回 +1,如果两者相等则返回 0。

如何定义一个函数?

如果有内置函数或个人函数带来功能,那么表示函数名称的字符串就是点。

如果它是一个对象的方法,你必须使用一个数组引用实例和方法名称

至少,您可以使用这样的匿名函数:

function sortALevel(&$array){

usort($array,function($a,$b){
     if($a['sort_order'] > $b['sort_order']){
       return 1;
     }
     if($a['sort_order'] < $b['sort_order']){
       return -1;
     }
     return 0;

  });
  }

对整个数组进行排序

function sort_recursive($array){ 
sortALevel($array);
foreach($array as $value){
   if(is_array($value)){

     sort_recursive($value);
   }
}
}
于 2012-12-01T15:44:05.403 回答