订购PHP数组

时间:2011-01-17 21:23:34

标签: php arrays tree hierarchy

我有一个php数组(带注释),必须以不同方式排序。

数组内容的顺序应该是这样的......

parent
 child
  child
   child
parent
 child
  child
etc.

父评论的内容为“parent = 0”。 子评论具有其父母的ID(例如“parent = 1”)。 儿童评论的深度/数量未知。

当我有这种数组时,如何获得具有上述顺序的数组?

Array
(
    [0] => Array
        (
            [comment_id] => 1
            [parent] => 0
        )

    [1] => Array
        (
            [comment_id] => 2
            [parent] => 0
        )

    [2] => Array
        (
            [comment_id] => 3
            [parent] => 1
        )

    [3] => Array
        (
            [comment_id] => 4
            [parent] => 3
        )

)

2 个答案:

答案 0 :(得分:1)

借用我的answer here。您可以查看许多类似的问题。

类似的东西:

<?php
$p = array(0 => array());
foreach($nodes as $n)
{
  $pid = $n['parent'];
  $id = $n['comment_id'];

  if (!isset($p[$pid]))
    $p[$pid] = array('child' => array());

  if (isset($p[$id]))
    $child = &$p[$id]['child'];
  else
    $child = array();

  $p[$id] = $n;
  $p[$id]['child'] = &$child;
  unset($p[$id]['parent']);
  unset($child);

  $p[$pid]['child'][] = &$p[$id];    
}
$nodes = $p['0']['child'];
unset($p);
?>

答案 1 :(得分:0)

让我猜一下:你有一个数据库,在每个节点中存储“父”关系。你想要的是将该表示转换为标准的“树”表示。关于您拥有数据的模型的更多理论:http://www.phpriot.com/articles/nested-trees-1

以下是如何做到这一点:创建一个名为“TreeNode”的类:

class TreeNode {
     public $commendId;
     public $arrChildren;
}

然后,遍历从数据库中获取的数组。浏览每个项目,并创建TreeNodes,您正在处理项目。您可以使用深度优先或广度优先方法来查找父节点并将节点附加到父节点。