無限分類の場合、PHP はインターフェイスを通じてすべての分類を抽出した後、分類ツリーを生成します。

WBOY
リリース: 2016-06-13 12:17:51
オリジナル
871 人が閲覧しました

無限分類の場合、PHP はインターフェイス

を介してすべてのカテゴリを抽出した後、分類ツリーを生成します。 アプリケーション シナリオ:

Web を通じて無制限の分類部門のデータを取得します。インターフェイス、部門 解析されるデータの形式は 2 次元配列です。キャッシュ機構を追加せずに簡単な小さなフレームワークを一時的に作成したため、ページ上のすべての部門を一度に表示することしかできません。再帰的に実装できますが、複雑すぎます。


解決策:

前提として、操作には再帰的メソッドを使用しますが、取得したデータに対して新しいメソッドを生成します。インターフェイスを介して 3 次元配列を作成し、再帰的な操作を実行するため、複雑さは比較的低くなります。 (もっと簡単な方法をご存知の方がいらっしゃいましたら、回答お願いします。)


実装方法:

1. 渡されたデータの処理インターフェースによって取得されます。

/* * 将拉取到的部门数据处理成三维数组 * @param $dept array json解析出来的数组 * @return array * */function dept_enarray($dept = array()){    $dept_array = array();    foreach($dept as $key => $val){        if($val['parentno']){            $dept_array[$val['parentno']][0][] = $val;        }else{            $dept_array[0][] = $val;        }    }    return $dept_array;}
ログイン後にコピー

2. 処理された 3 次元配列に対して再帰演算を実行し、html を生成します。

/* * 构建组织部门树 * @param $orgdept array dept_enarray函数处理过的数组 * @param $html    string html标签内容 * @param $lv      int    当前的操作等级 * @param $parentarr array 拥有子部门的部门编码 * @param $orgarr  array   原始传入的数组 * return string html * */function get_depttree($orgdept,$html = '',$lv=1, $parentarr = '', $orgarr = ''){    $vl = $lv;    if(!$orgarr)        $orgarr = $orgdept;    if(!$parentarr && $lv == 1)        $parentarr = array_keys($orgdept);    foreach($orgdept[0] as $key=>$val){        if(!in_array($val['deptno'],$parentarr))            $disvisiable = ' class="disvisiable" ';        else            $disvisiable = '';        if($lv == 1 ){            $html .= '<dl>            <dt class="f&#39;.$val[&#39;parentno&#39;].&#39; father" data-deptid="&#39;.$val[&#39;deptno&#39;].&#39;" status="close">                <em><img src="/public/images/list-close.png"&#39;.$disvisiable.&#39;> </em>                <span>'.$val['name'].'</span>            <div class="addmenu">                <ul>                    <li class="addson">添加子部门</li>                    <li class="adduser">添加成员</li>                    <li>编辑部门</li>                    <li class="deldept">删除部门</li>                </ul>            </div>            </dt>';        }else{            $html .= '<dd class="list&#39;.($vl-1).&#39; f&#39;.$val[&#39;parentno&#39;].&#39; father" data-deptid="&#39;.$val[&#39;deptno&#39;].&#39;" status="close">                <em><img src="/public/images/list-close.png"&#39;.$disvisiable.&#39;></em>                <span>'.$val['name'].'</span>                <div class="addmenu">                    <ul>                        <li class="addson">添加子部门</li>                        <li class="adduser">添加成员</li>                        <li>编辑部门</li>                        <li class="deldept">删除部门</li>                    </ul>                </div>            </dd>';        }        if(in_array($val['deptno'], $parentarr)){            $html = get_depttree($orgarr[$val['deptno']],$html,++$vl,$parentarr,$orgarr);        }        if($lv == 1)            $html .= '</dl>';    }    return $html;}
ログイン後にコピー

最終的な HTML 効果は次のとおりです。



PS: 誰かがより良い解決策を持っている場合は、メッセージを残してください。ありがとうございます。





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!