Заказ массива PHP - PullRequest
       5

Заказ массива PHP

3 голосов
/ 18 января 2011

У меня есть массив php (с комментариями), который должен быть упорядочен по-другому.

Порядок содержимого массива должен быть таким ...

parent
 child
  child
   child
parent
 child
  child
etc.

Родительские комментарии имеют "parent = 0". Дочерние комментарии имеют идентификатор своего родителя (например, «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 ]

1 голос
/ 18 января 2011

Заимствовано из моего ответа здесь . Есть много похожих вопросов, которые вы можете проверить.

Что-то вроде:

<?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);
?>
0 голосов
/ 18 января 2011

Позвольте мне угадать: у вас есть база данных, в которой хранятся «родительские» отношения в каждом узле.То, что вы хотите, - это преобразовать это представление в стандартное «древовидное» представление.Больше теории о модели, в которой у вас есть данные: http://www.phpriot.com/articles/nested-trees-1

Вот как вы можете это сделать: создайте класс под названием TreeNode:

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

Затем выполните итерациюмассив вы получили из базы данных.Просмотрите каждый элемент и создайте TreeNodes, когда вы обрабатываете элементы.Вы можете использовать подход, основанный на глубине или ширине, чтобы найти родителя и присоединить к нему узлы.

...