首页 > 解决方案 > PHP - 按值递归排序数组

问题描述

我有一个大数组,例如:

Array
(
    [1] => Array
        (
            [ID] => 1
            [name] => Product 1
            [productorder] => 7
            [children] => Array
                (
                    [1] => Array
                        (
                            [ID] => 54
                            [name] => Product 1.1
                            [productorder] => 4
                        )

                    [2] => Array
                        (
                            [ID] => 8
                            [name] => Product 1.2
                            [productorder] => 2
                        )
                )
        )
    [2] => Array
        (
            [ID] => 2
            [name] => Product 2
            [productorder] => 1
        )
    [3] => Array
        (
            [ID] => 3
            [name] => Product 3
            [productorder] => 5
        )
)

我需要按 value 重新排序所有数组的位置productorder。它必须通过“children”键递归,但有些数组不能有这个键。我从这个主题尝试过:

usort($myArray, function($a, $b) {
    return $a['order'] - $b['order'];
});

但它不是递归的!任何的想法?

标签: phparrayssortingrecursionmultidimensional-array

解决方案


创建一个函数recSortByKey并递归调用输入的函数children(如果存在) -

function recSortByKey($key = "", $arr = []) {
  // flat
  usort($arr, function($a, $b) {
    return $a[$key] - $b[$key];
  });
  // nested
  if (array_key_exists("children", $arr) && count($arr["children"])) {
    recSortByKey($key, $arr["children"])
  }
}

推荐阅读