我如何对多维数组进行排序以在PHP中创建“树”

时间:2013-03-06 01:40:26

标签: php arrays 2d multidimensional-array

我如何对多维数组进行排序或迭代,使其形成树状结构(每个父元素之后的所有子元素),例如:

Parent #1
Child #1
Child #2

Parent #2
Child #1

Parent #3
Child #1
Child #2

这是一个示例数组。请务必注意,数组最初未排序(项目及其子项不以任何特定顺序出现)。

Array (
[0] => Array
    (
        [id] => 1 
        [content] => Parent #1 
    )
[1] => Array
    (
        [id] => 2
        [content] => Parent #2
    )
[2] => Array
    (
        [id] => 3
        [content] => Parent #3
    )
[3] => Array
    (
        [parent] => 1
        [content] => Child #1
    )
[4] => Array
    (
        [parent] => 1
        [content] => Child #2
    )
[5] => Array
    (
        [parent] => 3
        [content] => Child #2
    )
[6] => Array (
        [parent] => 3
        [content] => Child #1
    )
[7] => Array (
        [parent] => 2
        [content] => Child #1
    )
)
如果我完全错了或者问一些不可能的事情,我道歉。我尝试过使用usort但是我无法找出正确的逻辑。

1 个答案:

答案 0 :(得分:0)

<?php
$array = array(
           array(
             'id' => 1,
             'num' => 6,
             'color' => 'green'
),

           array(
             'id' => 4,
             'num' => 5,
             'color' => 'red'
)
           );
$nk = new_sort($array,'color','asc');
print_r($nk);

$nk = new_sort($array,'num','desc');
print_r($nk);
function new_sort($array_data, $key, $orderby = 'asc')
{
  $na = $rv = array();

  foreach ($array_data as $k => $n) {
    $na[$k] = $n[$key];
  }
  $orderby == 'asc' ? asort($na) : arsort($na);
  foreach ($na as $nk => $nv) {
    $rv[] =  $array_data[$nk];
  }

  return $rv;
}