Получить все дочерние, внучатые и т. д. узлы под родителем, используя php с результатами запроса mysql

Я пытался понять это, но я ничего не получил. Надеюсь, кто-то может прийти мне на помощь.

Моя проблема в том, что я использую модель данных списка смежности для создания данных иерархии в mysql. Я могу получить таблицу (, см. ниже ), в многомерный массив с ассоциативным массивом для каждого элемента. Что я хочу сделать, так это как только я получу этот массив, я хочу получить другой массив со всеми узлами (, дочерними, внуками и т. д. )под родительским идентификатором (, включая родительский элемент ). Я просто могу не тренируюсь, как кодировать tihs в php.

В MySQL моя таблица выглядит так:

id     name       parent_id
1  Electronics          0
2  Televisions          1
3  Portable Electronics 1
4  Tube                 2
5  LCD                  2
6  Plasma               2
7  Mp3 Players          3
8  CD Players           3
9  2 Way Radios         3
10 Flash                7

Я могу извлечь все строки с этим кодом в ассоциативный массив с помощью this.

$r = mysql_query("SELECT * FROM test ");
        $data = array();
        while($row = mysql_fetch_assoc($r)) {
         $data[] = $row;
         }      

Получает результаты:

Array 
( 
    [0] => Array 
    ( 
        [id] => 1 
        [name] => Electronics 
        [parent_id] => 0 
    ) 
    [1] => Array 
    ( 
        [id] => 2 
        [name] => Televisions 
        [parent_id] => 1 
    ) 
    [2] => Array 
    ( 
        [id] => 3 
        [name] => Portable Electronics 
        [parent_id] => 1 
    )
    [3] => Array 
    (
        [id] => 4 
        [name] => Tube 
        [parent_id] => 2 
    )
    [4] => Array 
    (
        [id] => 5 
        [name] => LCD 
        [parent_id] => 2
    )
    [5] => Array
    (
        [id] => 6 
        [name] => Plasma 
        [parent_id] => 2
    )
    [6] => Array
    (
        [id] => 7 
        [name] => Mp3 Players 
        [parent_id] => 3 
    )
    [7] => Array 
    (
        [id] => 8 
        [name] => CD Players 
        [parent_id] => 3
    )
    [8] => Array 
    (
        [id] => 9 
        [name] => 2 Way Radios 
        [parent_id] => 3
    )
    [9] => Array
    (
        [id] => 10 
        [name] => Flash 
        [parent_id] => 7 
    ) 
)

С этим результатом я хочу отфильтровать его с помощью идентификатора.

Скажем, например, мне нужен ассоциативный массив каждого узла в Portable Electronics с идентификатором 3.(Использовать идентификатор для кода)

Он вернет массив строк с идентификаторами :

  • . 3 Портативная электроника (Выбранный родительский элемент должен быть включен)
  • 7 MP3-плееров (Ребенок)
  • 8 проигрывателей компакт-дисков (Ребенок)
  • 9 Двусторонние радиоприемники (Детский)
  • 10 Вспышка (Внук)

если бы у Флэша были дети, он бы их тоже вернул.

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

Обратите внимание :Мне не нужна функция, которая создает многомерный массив древовидной структуры (. Уже есть решение для этого ). Я хочу построить функцию :fetch _рекурсивную ($id )который получает идентификатор и возвращает все элементы на этом уровне и на уровнях ниже и т. д. и т. д.

Надеюсь, это поможет

Заранее спасибо

8
задан Benny33 16 July 2012 в 03:53
поделиться