ホームページ  >  記事  >  データベース  >  PHP と MySQL クエリ結果を使用して子ノード、孫ノード、子孫ノードを取得する方法

PHP と MySQL クエリ結果を使用して子ノード、孫ノード、子孫ノードを取得する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 15:02:02737ブラウズ

How to Fetch Child, Grandchild, and Descendant Nodes Using PHP with MySQL Query Results?

PHP と MySQL クエリ結果を使用して子ノード、孫ノード、および子孫ノードを取得する

このクエリは、隣接リストを使用して MySQL テーブルからデータを取得しますこの構造では、各行がノードとその親との関係を表します。目標は、このデータを、親ノード自体を組み込みながら、指定された親 ID の下にあるすべての子ノード、孫ノード、および子孫ノードを含む配列に変換することです。

再帰関数の使用: fetch_recursive

fetch_recursive 関数は、指定された親 ID から開始してデータ配列を走査し、すべての子孫ノードが含まれるまで子要素を再帰的に追加します。関数コードは次のとおりです。

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;
}

fetch_recursive 関数の使用

関数を使用するには、クエリから取得したデータ配列を fetch_recursive 関数に渡し、子孫を取得する親 ID。例:

$list = fetch_recursive($data, 3);

これは、ID 3 の親ノードとそのすべての子孫を含む、次の構造の配列を返します:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Portable Electronics
            [parent_id] => 1
        )

    [1] => Array
        (
            [id] => 7
            [name] => Mp3 Players
            [parent_id] => 3
        )

    [2] => Array
        (
            [id] => 10
            [name] => Flash
            [parent_id] => 7
        )

    [3] => Array
        (
            [id] => 8
            [name] => CD Players
            [parent_id] => 3
        )

    [4] => Array
        (
            [id] => 9
            [name] => 2 Way Radios
            [parent_id] => 3
        )
)

以上がPHP と MySQL クエリ結果を使用して子ノード、孫ノード、子孫ノードを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。