«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как получить все дочерние и дочерние узлы для родительского узла в MySQL с помощью PHP?

Как получить все дочерние и дочерние узлы для родительского узла в MySQL с помощью PHP?

Опубликовано 9 ноября 2024 г.
Просматривать:264

How to Get All Child and Descendant Nodes for a Parent in MySQL Using PHP?

Получить все дочерние, внуковые и т. д. узлы родительского узла с помощью PHP с результатами запроса MySQL.

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

Рассмотрим таблицу MySQL, организованную в виде списка смежности, где данные иерархии представлены столбцами для идентификатора, имени и родительский_ид. Следующий SQL-запрос может извлечь все строки из этой таблицы в ассоциативный массив:

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

Предположим, мы хотим отфильтровать этот массив для узлов под родительским элементом с идентификатором 3, включая самого родителя. Эта пользовательская функция fetch_recursive может выполнить это:

function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) {
  foreach($src_arr as $row) {
    if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) {
      $rowdata = array();
      foreach($row as $k => $v)
        $rowdata[$k] = $v;
      $cats[] = $rowdata;
      if($row['parent_id'] == $currentid)
        $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true));
    }
  }
  return $cats;
}

Чтобы использовать эту функцию, передайте массив $data, полученный из запроса, в качестве первого аргумента и идентификатор родительского узла, для которого вы хотите получить дочерние узлы, в качестве второго аргумента:

$list = fetch_recursive($data, 3);

$list теперь будет содержать ассоциативный массив со всеми дочерними узлами и включенным родительским узлом (id 3).

Это решение эффективно извлекает все дочерние узлы и узлы-потомки для указанного родителя без необходимости построения многомерной древовидной структуры.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3