Как создать многомерный массив в VB.NET или PHP - PullRequest
0 голосов
/ 17 декабря 2009

У меня есть набор данных, который настроен для комментариев. У меня есть уровни и столбец сортировки, но теперь я бы хотел получить это в массиве или как-то осмысленно отобразить:

id    comment           Parentid    Level   sortcol
2       Test                   NULL    0    0x00000002
4       This is the Second     NULL    0    0x00000004
5       First Reply             4      1    0x000000040005
7       Reply to first reply    5      2    0x0000000400050007
6       Second Reply            4      1    0x000000040006
8       Reply to second comment 4      1    0x000000040008

Как мне получить это в массив на PHP или VB.net (у меня нет предпочтений и я использую оба регулярно).

Мне нужен массив, который выглядит следующим образом (я просто указываю идентификаторы:

array([0]
         [id]=>2
      [1]
         [id]=>4
             array([0]
                      [id]=>5
                       array([0]
                                [id]=>7
                            )
                   [1]
                      [id]=>6
                   [2]
                      [id]=>8
                   )
       )

Данные являются результатом SQL.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2009

Примечание: я предполагаю, что, несмотря на то, что он не указан, вам нужен ключ 'children' в дополнение к 'id', чтобы содержать подмассивы.

// Skip list, to hold data as well as reference to nested list later
$flat = array ();
while ($row = mysql_fetch_assoc($result))
    $flat[$row['id']] = $row;

$root = array ();
foreach ($flat as $id => $row)
{
    // Get reference to parent, or root if none set
    if (!$row['Parentid'])
        $parent =& $root;
    else
        $parent =& $flat[$row['Parentid']]['ref'];

    if (!$parent['children'])
        $parent['children'] = array (); 

    // Append new child
    $parent['children'][] = array ('id' => $id);
    // Add newly appended child to skip list
    $flat[$id]['ref'] =& end ($parent['children']);
}

// Final nested list
$nested = $root['children'];

Чтобы это работало, все родители должны появиться перед своими детьми в плоском списке

0 голосов
/ 17 декабря 2009

Вы должны использовать Typed DataSet в VB .Net.

Типизированные наборы данных позволят вам сделать это практически без кода, и их гораздо проще использовать, чем двумерный массив.

Для начала создайте новый проект VB.Net, добавьте Typed DataSet и следуйте инструкциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...