ホームページ  >  記事  >  バックエンド開発  >  PHP Infinitus 分類の実装 (再帰を使用しない)、php recursion_PHP チュートリアル

PHP Infinitus 分類の実装 (再帰を使用しない)、php recursion_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:24:001255ブラウズ

PHP Infinitus 分類の実装 (再帰なし)、PHP 再帰

Infinitus 分類は、部門構造、記事分類などの開発でよく使用されます。 Infinitus 分類の難しさは、

などの「出力」と「クエリ」にあります。
  • 記事分類をff6d136ddc5fdfeffaf53ff6ee95f185リスト形式に出力します;
  • カテゴリ A のすべてのカテゴリに含まれる記事を検索します。

1.実施原則

記事「無限分類の実装アイデア」では、いくつかの一般的な実装方法が紹介されており、それぞれに長所と短所があります。このうち、「改良されたプリオーダートラバーサルツリー」のデータ構造は、出力やクエリには便利ですが、モバイルの分類や一般的な理解においてはやや複雑です。

2.データ構造

id fid タイトル
1 0 中国
2 1 江蘇省
3 1 安徽省
4 8 江陰
5 3 蕪湖
6 3 合肥
7 3 ベンブ
8 2 無錫
リーリー

各カテゴリは親カテゴリ ID (すなわち fid) を介して「連結」され、分類ツリーを形成します。連結を実行するときに注意すべき点が 1 つあります。カテゴリ A の fid をそのサブカテゴリの ID にすることはできません。

このデータ構造を出力に使用するときに最も一般的に使用されるアルゴリズムは「再帰」です。PHP 言語に精通している友人なら、PHP は再帰が苦手であり、再帰の回数が制限されていることを知っているはずです (状況に応じて約 100 回)。オペレーティング システムと構成)。

すべての再帰はループを使用して実装できるため、この記事では、PHP 言語の特性に基づいて、再帰実装よりも効率的な「無限レベル」分類用の関数セットを作成しました

3.ULリストフォームを出力します

上記のデータを以下のHTMLとして出力します

リーリー

この HTML 構造は、フロントエンドで使用するのに非常に便利です (JavaScript と CSS を使用して折りたたみ可能なツリーを構築します)。具体的な実装手順は以下の通りです

リーリー

4. オプションリストフォームを出力します

リーリー

具体的な実装手順は以下の通りです。

リーリー

5. 特定のカテゴリのすべてのサブカテゴリを検索します

リーリー

6. 特定のカテゴリのすべての親カテゴリを検索します

リーリー

7.関連機能

<code><?php
    $list = array(
        array('id'=>1, 'fid'=>0, 'title' => '中国'), 
        array('id'=>2, 'fid'=>1, 'title' => '江苏'),
        array('id'=>3, 'fid'=>1, 'title' => '安徽'),
        array('id'=>4, 'fid'=>8, 'title' => '江阴'),
        array('id'=>5, 'fid'=>3, 'title' => '芜湖'),
        array('id'=>6, 'fid'=>3, 'title' => '合肥'),
        array('id'=>7, 'fid'=>3, 'title' => '蚌埠'),
        array('id'=>8, 'fid'=>8, 'title' => '无锡')
    );
?></code>

phpの再帰問題(無限分類)

Foreach 自体は、$arr 配列が空でない場合、子ノードを走査して再帰的にアクセスしますが、葉ノードの場合、$arr 配列は空であるため、この時点ではまったく foreach されません。直接返却されます。クリア?

phpの再帰問題、Infinitus分類スタイルに従ってデータを表示したい

最初に json を配列にデコードし、json_decode 関数を使用します。2 番目のパラメーターを追加する必要があることに注意してください。追加しないとオブジェクトが返されます。次のステップは再帰です。これは、1 つずつ実行するだけの最も単純な再帰です。
以下は完全なコードです:
$data= json_decode($str,true);$options = getChildren($data);function getChildren($parent,$deep=0) {foreach($parent as $row) { $ data[] = array("id"=>$row['id'], "name"=>$row['name'],"pid"=>$row['parentid'],' deep '=>$deep);if ($row['childs']) {$data = array_merge($data, getChildren($row['childs'], $deep+1));}}return $data ; }?>701d81aaa14b8afd38d7545721c937f255a5f5bd5294290d7b34eac948d75068e2e20db0d63bf1bf1c5f53027a9a0aa8">98830ae643c695729d3a60a03343c488c0291d27b1696e94314266e700580d294afa15d3069109ac30911f04c56f33384219f431c5ecc1a046160e9df8d78b1218bb6ffaf0152bbe49cd8a3620346341
上記のコードはテストされており、レンダリングは次のようになります


PHP Infinitus 分類の実装 (再帰を使用しない)、php recursion_PHP チュートリアル

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/831802.html技術記事 PHP Infinitus 分類の実装 (再帰を使用しない) PHP の再帰的 Infinitus 分類は、部門構造や記事分類などの開発でよく使用されます。 Infinitus 分類の難しさは出力と検索にあります...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。