この記事では、PHPを使ってメニューを実装する方法を詳しく紹介しますInfinitus分類一般的な項目メニューは、if elseだけを使って判断すると不格好になります。メニューを変更したいのですが、とても面倒です。最善の方法は、メニューをデータベースに保存し、データベースからメニューを取得して走査し、ページに表示することです。この記事の目的は、データをクエリし、メニューの上位レベルと下位レベルを 1 つずつ照合する方法を説明することです。無限分類技術を採用。 メニューデータ
ここでのメニューデータはデータベースからクエリされたり処理されたりするものではありません。データは基本的に次のとおりです。データベースからクエリされるように変更されました。
メニュー Infinitus 分類メソッドを作成します
$items = array( 1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'), 2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'), 3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'), 4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'), 6 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'), 5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'), );
上記のコードを分析します: ここでより重要な部分は、コード内の
コメントの場所、フォーカス 1、フォーカス 2 です。まず、配列を走査します
2. ポイント 1 は、ルート メニューであるかどうかを判断し、その配列の参照を新しい配列に割り当てます。サブクラス配列を親クラス配列に割り当てます。5. 最終結果はツリー構造の配列です。 結果は次のようになります:
function generateTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) { $tree = array(); $packData = array(); foreach ($list as $data) { $packData[$data[$pk]] = $data; } foreach ($packData as $key => $val) { if ($val[$pid] == $root) { //代表跟节点, 重点一 $tree[] = &$packData[$key]; } else { //找到其父类,重点二 $packData[$val[$pid]][$child][] = &$packData[$key]; } } return $tree; }
1. PHP を使用して Infinitus を実行する際の難しさは、代入ではなく、配列への参照の代入です。
2. php $arr=&$arr1、$CustomerTwo=&$Customer などのオブジェクト では、通常、メモリ内に新しい領域が開かれません。メモリ内のデータの参照を新しい変数に渡します 3. この方法を使用すると、再帰を使用するよりもはるかに簡単になります。
4. 上記の方法は最適ではありません。他のメソッドはインターネットで見つけることができます。いくつかのメソッドは、それらを使用した後に表示されます。たとえば、次の関数: このメソッドは確かに効果を達成でき、非常に効率的であるように見えます。 、最大の問題は、id 値が対応するキー値と一致している必要があるということです。理解している人は自分でテストできると思います。 関連する推奨事項:
php 無限レベル分類の再帰的実装の開発プロセスとサンプル コード
以上がPHPでメニュー無限分類を実現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。