ネストされたメニュー システムでは、各メニュー項目が子メニュー項目を持つことができます、さらに独自の子項目を持つことができます。目標は、これらのネストされたメニュー レベルをデータベースから効果的に取得して表示することです。
これを達成するには、次のような 非再帰的 アプローチを採用できます。 :
上記のアプローチを示す PHP 関数を次に示します。
<code class="php">function generateMenu($items) { $html = ''; $parent = 0; $parentStack = array(); $children = array(); foreach ($items as $item) { $children[$item['parent_id']][] = $item; } while (($option = each($children[$parent])) || ($parent > 0)) { if (!empty($option)) { // 1) Item with children if (!empty($children[$option['value']['id']])) { $html .= '<li>' . $option['value']['title'] . '</li>'; $html .= '<ul>'; array_push($parentStack, $parent); $parent = $option['value']['id']; } // 2) Item without children else { $html .= '<li>' . $option['value']['title'] . '</li>'; } } // 3) Current parent has no more children else { $html .= '</ul>'; $parent = array_pop($parentStack); } } return $html; }</code>
この関数を使用するには、まずデータベースからメニュー項目を取得し、それらを配列としてgenerateMenu()関数に渡します。結果として得られる HTML は、階層メニュー構造を表す一連のネストされた順序なしリストになります。
この非再帰的アプローチにより、次のような場合に発生する可能性のある無限ループのリスクが排除されます。再帰により、ネストされたメニューを生成するためのより安定した効率的なソリューションになります。
以上がPHP と MySQL を使用して無制限のネストされたメニュー システムを構築する方法: 非再帰的アプローチ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。