ホームページ  >  記事  >  バックエンド開発  >  無制限の階層およびツリーノード出力

無制限の階層およびツリーノード出力

WBOY
WBOYオリジナル
2016-07-25 08:49:511189ブラウズ
';
  • $strRe = '
  • 簡単なオリジナルデータを渡すだけで、N種類のノード間の関係を導き出し、ツリー状のDOMを出力できます
    注: git.oschina.net の最新コードを参照してください ([ソース コード ソース] リンクをクリックします)。 無制限の階層およびツリーノード出力
    1. /**
    2. * 出力無制限の分類、私は自分で書きました~
    3. *
    4. * @author binny_w@qq.com
    5. * @since 2013-09-24 AM
    6. */
    7. /*使用例*/
    8. /*
    9. $arrAll = array(
    10. array('id' => 1, 'name' => '列分類_1', '名前_en' => 'cat_1', 'parent_id' => 0),
    11. array('id' => 2, '名前' => '列分類_2', '名前_en' = > 'cat_2', 'parent_id' => 0),
    12. array('id' => 3, 'name' => '列分類_3', 'name_en' => ' cat_3', 'parent_id' => 1),
    13. array('id' => 4, 'name' => '列分類_4', 'name_en' => 'cat_4', 'parent_id' = > 1),
    14. array( 'id' => 5, 'name' => '列分類_5', 'name_en' => 'cat_5', 'parent_id' => 2),
    15. 配列 ('id' => 6, ' name' => '列分類_6', 'name_en' => 'cat_6', 'parent_id' => 4),
    16. array('id' => 7, 'name' => '列分類_7' , 'name_en' => 'cat_7', 'parent_id' => 6),
    17. array('id' => 8, 'name' => '列分類_8', 'name_en' => 'cat_8 ', 'parent_id' => 7),
    18. array('id' => 9, 'name' => '列分類_9' , 'name_en' => 'cat_9', 'parent_id' => 6 )
    19. );
    20. $objT = new TreeList($arrAll);
    21. print_r($objT->arrAll);
    22. print_r($objT->arrIdAll);
    23. print_r($objT->arrIdChildren);
    24. print_r ($objT->arrIdSon);
    25. print_r($objT->arrIdLeaf);
    26. print_r($objT->arrIdRelation);
    27. print_r($objT->arrIdRelationSimple);
    28. print_r($objT->gt; arrIdRoot);
    29. print_r($objT->arrIdBackPath);
    30. print($objT->getTable());
    31. print($objT ->getSelect('cat', array(1, 8), true) );
    32. */
    33. // !define('IN_FRAME') && die('404 Page');
    34. class TreeList {
    35. /* *
    36. * 考えられるすべてのデータを分析します
    37. */
    38. public $arrAll = array(); // オリジナルdata
    39. public $arrIdRelation = array(); // _ID をキー名とする多次元リレーションシップ
    40. public $arrIdRelationSimple = array(); // _ID をキー名とする多次元リレーションシップの簡略化、ツリー図の出力に使用されます
    41. public $arrIdAll = array(); // 元のデータをキー名として配列に変換します
    42. public $arrIdSon = array() // すべての親子関係
    43. public $arrIdLeaf = array();リーフノード
    44. public $arrIdRoot = array(); // ルートノードの _ID
    45. public $arrIdChildren = array(); // 各ノードの子孫 ID
    46. public $arrIdBackPath = array(); // 各ノードは、 root
    47. public $strItem = '
      {$strSep}{$name}'; / / ツリーの構造を出力します
    48. /**
    49. *コンストラクター、元のデータを渡します
    50. */
    51. public function __construct($arrData) {
    52. $this->arrAll = $arrData;
    53. $this->processData();
    54. }
    55. / **
    56. * シンプルなツリー
    57. */
    58. public function getHtml() {
    59. return $this->genHtml() ;
    60. }
    61. /**
    62. * テーブルを使用して木を描画します
    63. */
    64. public function getTable() {
    65. $this-> strItem = '
    {$strSep}{$name} {$name}{$name_en}
    ';
  • $strRe .= '< tr>
  • ';
  • $strRe .= $this->genHtml();
  • $strRe .= '
  • 構造英語名
    ';
  • return $strRe;
  • }
  • /* *
  • * ドロップダウンボックスに表示します
  • * 例:
  • * $objTreeList->getSelect('parent_id', 0, false, 'class="span5"', array(0, '≡ 第一レベルの列として) ≡'))))
  • */
  • public function getSelect($strName = 'tree', $arrValue = array(), $ blmMulti = false, $strExt = '', $arrFirst = null) {
  • !is_array($arrValue) && $arrValue = array($arrValue);
  • foreach ($this->arrIdAll as $strTemp => $arrTemp ) {
  • $this->arrIdAll[$strTemp]['selected'] = '';
  • if (in_array($arrTemp['id'], $arrValue)) {
  • $this->arrIdAll[$strTemp] ]['選択済み'] = ' 選択済み=選択済み"';
  • }
  • }
  • $this->strItem = '' ;
  • $strRe = '