PHP Infinitus 分類の実装 (再帰を使用しない)、php recursion_PHP チュートリアル
PHP Infinitus 分類の実装 (再帰なし)、PHP 再帰
Infinitus 分類は、部門構造、記事分類などの開発でよく使用されます。 Infinitus 分類の難しさは、
などの「出力」と「クエリ」にあります。- 記事分類を
- リスト形式に出力します;
- カテゴリ 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>
Foreach 自体は、$arr 配列が空でない場合、子ノードを走査して再帰的にアクセスしますが、葉ノードの場合、$arr 配列は空であるため、この時点ではまったく foreach されません。直接返却されます。クリア?
最初に 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 ; }?>
上記のコードはテストされており、レンダリングは次のようになります
。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
