按元素值名称对特定的多维嵌套数组级别进行排序

时间:2017-10-03 10:58:37

标签: php arrays sorting multidimensional-array

我的数组结构看起来像这样。

    Array
    (
        [category1] => Array
            (
                [2694] => Array
                    (
                        [node_name] => "B"

                     )

                [2695] => Array
                    (
                        [node_name] => "A"

                     )
                [2696] => Array
                    (
                        [node_name] => "C"

                     )
             )
    )

我想要父节点数字按节点名称。预期的结果应该是这样的。

Array
(
    [category1] => Array
        (
            [2695] => Array
                (
                    [node_name] => "A"

                 )

            [2694] => Array
                (
                    [node_name] => "B"

                 )
            [2696] => Array
                (
                    [node_name] => "C"

                 )
         )
)

我尝试使用funcion

进行多重排序和uasort
function cmp($a, $b) {
    return $a['node_name'] > $b['node_name'] ? 1 : -1;
}

但是应该考虑多个类别,所以我尝试迭代类别并在内部元素上使用uasort或multisort。我不确定应该如何处理这个问题,所以我想知道是否有人有解决嵌套数组的经验,并根据under元素的名称对特定级别进行排序。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你正在做我想要的正确的事。

<?php

$cats = array(
  'category1' => array(
    2694 => array('node_name' => 'B'),
    2695 => array('node_name' => 'A'),
    2696 => array('node_name' => 'C'),
  ),
  'category2' => array(
    2691 => array('node_name' => 'T'),
    2692 => array('node_name' => 'S'),
    2693 => array('node_name' => 'A'),
  )
);

function cmp($a, $b) {
    return $a['node_name'] > $b['node_name'] ? 1 : -1;
}

foreach ($cats as $category => $data) {
   uasort($data, 'cmp');
   $cats[$category] = $data;
}

var_dump($cats);

输出:

array(2) {
  ["category1"]=>
  array(3) {
    [2695]=>
    array(1) {
      ["node_name"]=>
      string(1) "A"
    }
    [2694]=>
    array(1) {
      ["node_name"]=>
      string(1) "B"
    }
    [2696]=>
    array(1) {
      ["node_name"]=>
      string(1) "C"
    }
  }
  ["category2"]=>
  array(3) {
    [2693]=>
    array(1) {
      ["node_name"]=>
      string(1) "A"
    }
    [2692]=>
    array(1) {
      ["node_name"]=>
      string(1) "S"
    }
    [2691]=>
    array(1) {
      ["node_name"]=>
      string(1) "T"
    }
  }
}