免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2408 | 回复: 8
打印 上一主题 下一主题

请问这个数组怎么样以树行结构输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-07 14:01 |只看该作者 |倒序浏览

  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [id] => 1
  6.             [pid] => 0
  7.             [child] => Array
  8.                 (
  9.                     [0] => Array
  10.                         (
  11.                             [id] => 7
  12.                             [pid] => 1
  13.                             [child] => Array
  14.                                 (
  15.                                     [0] => Array
  16.                                         (
  17.                                             [id] => 9
  18.                                             [pid] => 7
  19.                                             [child] => Array
  20.                                                 (
  21.                                                     [0] => Array
  22.                                                         (
  23.                                                             [id] => 10
  24.                                                             [pid] => 9
  25.                                                             [child] => Array
  26.                                                                 (
  27.                                                                 )

  28.                                                         )

  29.                                                 )

  30.                                         )

  31.                                 )

  32.                         )

  33.                     [1] => Array
  34.                         (
  35.                             [id] => 6
  36.                             [pid] => 1
  37.                             [child] => Array
  38.                                 (
  39.                                     [0] => Array
  40.                                         (
  41.                                             [id] => 8
  42.                                             [pid] => 6
  43.                                             [child] => Array
  44.                                                 (
  45.                                                 )

  46.                                         )

  47.                                 )

  48.                         )

  49.                 )

  50.         )

  51.     [1] => Array
  52.         (
  53.             [id] => 2
  54.             [pid] => 0
  55.             [child] => Array
  56.                 (
  57.                     [0] => Array
  58.                         (
  59.                             [id] => 3
  60.                             [pid] => 2
  61.                             [child] => Array
  62.                                 (
  63.                                     [0] => Array
  64.                                         (
  65.                                             [id] => 5
  66.                                             [pid] => 3
  67.                                             [child] => Array
  68.                                                 (
  69.                                                 )

  70.                                         )

  71.                                 )

  72.                         )

  73.                 )

  74.         )

  75.     [2] => Array
  76.         (
  77.             [id] => 4
  78.             [pid] => 0
  79.             [child] => Array
  80.                 (
  81.                 )

  82.         )

  83. )
复制代码


以上这个数组 我想根据指定的pid值,以树性结构输出他的所有子孙.

请大家帮忙.

下面这个函数是输出整个数组的树性结构
  1. function get_tree($ar=array(),$depth=0) {
  2.     $option = '';
  3.     foreach($ar as $key => $val){
  4.            
  5.            $option .=":".str_repeat("--",$depth)."" .$val['id']."-".$val['pid']."<br>";
  6.                 if(is_array($val['child'])) {
  7.                     $option .=get_tree($val['child'], $depth+1);
  8.                  }
  9.               
  10.            
  11.     }
  12.     return $option;
  13. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2006-03-07 18:19 |只看该作者
呵呵,很经典的问题,刚好我也做了这种数据结构的,特意留有一定通用性.
楼主能不能给出树的序列化数据,我看看能不能还原树型.(如果连序列化都不了解的话就当我没说过好了)

论坛徽章:
0
3 [报告]
发表于 2006-03-07 18:42 |只看该作者
把表的结构放出来

论坛徽章:
0
4 [报告]
发表于 2006-03-07 19:36 |只看该作者
建议写2个函数
第一个函数递归搜索某个id和它的子孙,返回一个数组
第二个递归打印这个数组

论坛徽章:
0
5 [报告]
发表于 2006-03-08 09:17 |只看该作者
数据结构
id name pid

id:类别编号
name:名称
pid:父类编号


  1. //测试数据
  2. $ar = array(
  3. array('id'=>1,'pid'=>0),
  4. array('id'=>2,'pid'=>0),
  5. array('id'=>3,'pid'=>2),
  6. array('id'=>4,'pid'=>0),
  7. array('id'=>5,'pid'=>3),
  8. array('id'=>6,'pid'=>1),
  9. array('id'=>7,'pid'=>1),
  10. array('id'=>8,'pid'=>6),
  11. array('id'=>9,'pid'=>7),
  12. array('id'=>10,'pid'=>9)
  13. );
复制代码


根据上述数组找到指定pid的所有子孙.

论坛徽章:
0
6 [报告]
发表于 2006-03-08 13:33 |只看该作者
原帖由 imbiss 于 2006-3-7 19:36 发表
建议写2个函数
第一个函数递归搜索某个id和它的子孙,返回一个数组
第二个递归打印这个数组


第一个函数写不出来啊,下面是我写的,只有当pid=0的时候才正确,其他不正确,帮忙看看啊.

  1. function get_pid_array($ar, $pid)
  2. {
  3.         $d = array();
  4.         $i = 0;
  5.         foreach ($ar as $k => $v)
  6.         {
  7.                 if($v['pid'] == $pid)
  8.                 {
  9.                         $d[$i] = $v;
  10.         }
  11.                 else
  12.                 {
  13.                         $d[$i]=get_pid_array($v['child'], $pid);
  14.                 }
  15.                 $i++;
  16.         }
  17.         return $d;
  18. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2006-03-08 14:12 |只看该作者
如果你不会输出1楼里的数组 或者给出 序列化数据也行,

论坛徽章:
0
8 [报告]
发表于 2006-03-09 21:20 |只看该作者

  1. <?php
  2. //Test Array
  3. $input = $input=array("0"=>Array("id"=>1,"pid"=>0,"child"=>Array("0"=>Array("id"=>7,"pid"=>1,"child"=>Array("0"=>Array("id"=>9,"pid"=>7,"child"=>Array("0"=>Array("id"=>10,"pid"=>9,"child"=>Array()))))),"1"=>Array("id"=>6,"pid"=>1,"child"=>Array("0"=>Array("id"=>8,"pid"=>6,"child"=>Array()))))),"1"=>Array("id"=>2,"pid"=>0,"child"=>Array("0"=>Array("id"=>3,"pid"=>2,"child"=>Array("0"=>Array("id"=>5,"pid"=>3,"child"=>Array()))))),"2"=>Array("id"=>4,"pid"=>0,"child"=>Array()));

  4. class test{
  5.                         var $target = array();
  6.                         var $code;

  7.                         function getArrayById( $searchID, $inputArray, $d){       
  8.                                         $d++; if($d>100){ die("D Error!");exit();}
  9.                                         for($i=0; $i<sizeof($inputArray); $i++){                                                       
  10.                                                         if( $inputArray[$i]["id"]  ==  $searchID ){       
  11.                                                                         //printf("Haha I gound %s!<br>", $searchID);
  12.                                                                         //print_r($inputArray[$i]);
  13.                                                                         array_push( $this->target, $inputArray[$i] ) ;                                                               
  14.                                                         }
  15.                                                         else{
  16.                                                                         if(sizeof($inputArray[$i]["child"])>0){                                                                       
  17.                                                                                 $this->getArrayById( $searchID, $inputArray[$i]["child"], $d);
  18.                                                                         }
  19.                                                         }
  20.                                         }
  21.                         }

  22.                         function getArrayInTree( $treeArray, $rn ){               
  23.                                         $rn++;if($rn>20){  die("Error!"); exit();}
  24.                                         for($i=0; $i<sizeof($treeArray); $i++){                                                       
  25.                                                         if(sizeof($treeArray[$i]["child"])>0){
  26.                                                                 $string .= "<ul><li>ID:".$treeArray[$i]["id"];
  27.                                                                 $string .=$this->getArrayInTree($treeArray[$i]["child"], $rn);
  28.                                                                 $string .= "</li></ul>";
  29.                                                         }                                                                                                               
  30.                                                         else{
  31.                                                                 $string = "<ul><li>ID:";
  32.                                                                 $string.= $treeArray[$i]["id"];
  33.                                                                 $string.= "</li></ul>";                                                               
  34.                                                         }                                                       
  35.                                         }                                       
  36.                                         $rn--;
  37.                                         return $string;
  38.                         }
  39. }


  40. $mytest = new test();
  41. $mytest->getArrayById (1, $input, 0);
  42. $html = $mytest->getArrayInTree( $mytest->target , 0 );
  43. print($html);
  44. ?>
复制代码


顺下来的就是如何把 ul li 美化成 属形结构

[ 本帖最后由 imbiss 于 2006-3-9 23:11 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-03-09 21:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP