菜鸟求助,想实现两项功能,1、将数据库中主要字段spliter_name,up_spliter两项树形结构输出到IE,在此编写了树形输出代码,请给与指教看是否符合要求,2.将数据库中这两项输出到a.txt,结果如a.txt中所示,绞尽脑汁实在力不从心,请各位大神给与指教。以下为数据库、树形输出、欲实现效果等文件,谢谢!
**************************  tb_spliter.sql  **********************-- phpMyAdmin SQL Dump
-- version 3.5.4
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2013 年 05 月 01 日 11:02
-- 服务器版本: 5.5.18
-- PHP 版本: 5.4.0RC4SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;--
-- 数据库: `oa`
---- ----------------------------------------------------------
-- 表的结构 `tb_spliter`
--CREATE TABLE IF NOT EXISTS `tb_spliter` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `spliter_name` varchar(50) NOT NULL,
  `spliter_cap` int(4) NOT NULL,
  `spliter_city` varchar(50) NOT NULL,
  `spliter_top_device` varchar(50) NOT NULL,
  `spliter_top_cable` varchar(50) NOT NULL,
  `up_spliter` int(11) NOT NULL,
  `p_id` int(6) NOT NULL,
  `p_name` varchar(50) NOT NULL,
  `i_state` int(1) NOT NULL,
  `complet_date` datetime NOT NULL,
  `project_name` varchar(50) NOT NULL,
  `project_content` text,
  `table_type` int(1) NOT NULL,
  `relate_depart` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=gb2312 COMMENT='分光器表' AUTO_INCREMENT=91 ;--
-- 转存表中的数据 `tb_spliter`
--INSERT INTO `tb_spliter` (`id`, `spliter_name`, `spliter_cap`, `spliter_city`, `spliter_top_device`, `spliter_top_cable`, `up_spliter`, `p_id`, `p_name`, `i_state`, `complet_date`, `project_name`, `project_content`, `table_type`, `relate_depart`) VALUES
(81, 'a1', 1, 'xt', 'a', '无', 69, 217, 'hhh', 0, '2013-04-28 00:24:52', '0', '0', 1, 'qd'),
(80, 'a2', 1, 'xt', 'a', '无', 69, 217, 'hhh', 0, '2013-04-28 00:24:52', '0', '0', 1, 'qd'),
(79, 'a3', 1, 'xt', 'a', '无', 69, 217, 'hhh', 0, '2013-04-28 00:24:52', '0', '0', 1, 'qd'),
(78, 'a4', 1, 'xt', 'a', '无', 69, 217, 'hhh', 0, '2013-04-28 00:24:52', '0', '0', 1, 'qd'),
(69, 'a', 1, 'xt', '无', '无', 0, 217, 'hhh', 0, '2013-04-28 00:15:20', '0', '1', 1, 'qh'),
(82, 'b', 1, 'xt', '无', '无', 0, 217, 'hhh', 0, '2013-05-01 10:22:51', '0', '1', 3, 'qh'),
(83, 'b1', 1, 'xt', 'b', '无', 82, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(84, 'b2', 1, 'xt', 'b', '无', 82, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(85, 'b3', 1, 'xt', 'b', '无', 82, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(86, 'b4', 1, 'xt', 'b', '无', 82, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(87, 'b5', 1, 'xt', 'b', '无', 82, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(88, 'b6', 1, 'xt', 'b', '无', 82, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(89, 'b61', 1, 'xt', 'b', '无', 88, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(90, 'b62', 1, 'xt', 'b', '无', 88, 217, 'hhh', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh');/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;********************** tree.php **********************<?php
$filename = 'a.txt';     
    $fff=iconv('gb2312','utf-8',$fff); 
    if (!$handle = fopen($filename, 'w')) {    
         echo "cannot open $filename";    
         exit;    
    }    
include "../conn/conn.php";
   $sql="select * from tb_spliter where up_spliter = '0'";//选择出所有顶级设备
   $result=mysql_query($sql,$conn);
   $m=0;
   while($rows=mysql_fetch_row($result)){
   $sqlstr1="select * from tb_spliter where up_spliter = '".$rows[0]."'"; //判断顶级设备下的一级设备
   $result1=mysql_query($sqlstr1,$conn);
   $num=mysql_num_rows($result1); 
   if(!$num){  //如果不存在一级设备
  echo "\$a=".$rows[1]." ".$m."没有下级<br/>";
     }else{
         echo "\$b=".$rows[1]." ".$m."有下级<br/>";
    list_first($rows[0],$m);  //list_first轮询一级设备
     }
     $m+=1;
    }
       
function list_first($aa,$m){
 include "../conn/conn.php";
     $sql="select * from tb_spliter where up_spliter = '".$aa."'";//list_first轮询一级设备
     $result = mysql_query($sql,$conn);
     while($rows2 = mysql_fetch_row($result)){
     $sqlstr1 = "select * from tb_spliter where up_spliter = '".$rows2[0]."'"; //判断一级设备下是否有分支设备
     $result1 = mysql_query($sqlstr1,$conn);
     $nu = mysql_num_rows($result1);
      if(!$nu){    
         echo $rows2[1]." ".$m."没有下级<br/>";
     }else{
         echo $rows2[1]." ".$m."有下级<br/>";
    list_first($rows2[0],$m);  //list_first轮询设备
     }
     $m+=1;
     }
    }?>
**********************  a.txt(想要的结果) **********************
a-->a1;
a-->a2;
a-->a3;
a-->a4;
b-->b1;
b-->b2;
b-->b3;
b-->b4;
b-->b5;
b-->b6;
b6-->b61;
b6-->b62;

解决方案 »

  1.   

    基本算法$sql = "select id, up_spliter, spliter_name from tb_spliter order by 2, 1";
    $rs = mysql_query($sql);
     
    $res = array(); //结果数组
    $ind = array(); //索引数组
    while($row = mysql_fetch_assoc($rs)) {
      list($id, $pid) = array_values($row); 
      $ind[$id] = $row;
      if(isset($ind[$pid])) $ind[$pid]['child'][$id] =& $ind[$id]; //构造索引
      if($pid == 0) $res[$id] =& $ind[$id]; //转存根节点组
    }
    print_r($res);Array
    (
        [69] => Array
            (
                [id] => 69
                [up_spliter] => 0
                [spliter_name] => a
                [child] => Array
                    (
                        [78] => Array
                            (
                                [id] => 78
                                [up_spliter] => 69
                                [spliter_name] => a4
                            )                    [79] => Array
                            (
                                [id] => 79
                                [up_spliter] => 69
                                [spliter_name] => a3
                            )                    [80] => Array
                            (
                                [id] => 80
                                [up_spliter] => 69
                                [spliter_name] => a2
                            )                    [81] => Array
                            (
                                [id] => 81
                                [up_spliter] => 69
                                [spliter_name] => a1
                            )                )        )    [82] => Array
            (
                [id] => 82
                [up_spliter] => 0
                [spliter_name] => b
                [child] => Array
                    (
                        [83] => Array
                            (
                                [id] => 83
                                [up_spliter] => 82
                                [spliter_name] => b1
                            )                    [84] => Array
                            (
                                [id] => 84
                                [up_spliter] => 82
                                [spliter_name] => b2
                            )                    [85] => Array
                            (
                                [id] => 85
                                [up_spliter] => 82
                                [spliter_name] => b3
                            )                    [86] => Array
                            (
                                [id] => 86
                                [up_spliter] => 82
                                [spliter_name] => b4
                            )                    [87] => Array
                            (
                                [id] => 87
                                [up_spliter] => 82
                                [spliter_name] => b5
                            )                    [88] => Array
                            (
                                [id] => 88
                                [up_spliter] => 82
                                [spliter_name] => b6
                                [child] => Array
                                    (
                                        [89] => Array
                                            (
                                                [id] => 89
                                                [up_spliter] => 88
                                                [spliter_name] => b61
                                            )                                    [90] => Array
                                            (
                                                [id] => 90
                                                [up_spliter] => 88
                                                [spliter_name] => b62
                                            )                                )                        )                )        ))
      

  2.   

    恩,谢版主,开始也是看了置顶帖,将结果转储到一个数组中,可做的代码有问题,结果一直是多维数组,郁闷了老半天,我试下,感激涕零ING~~
      

  3.   

    老大,试了老半天,遍历数组想生成 a-a1;a-a2;....如a.txt那样的结果,可还是不行,望再帮忙指点下。
      

  4.   

    和我一开始生成的多维数组格式一样的,不过我当时只要一项,代码如下:
    <?php
    include "../conn/conn.php";
       $sql="select * from tb_spliter where up_spliter = '0'";//选择出所有顶级设备
       $result=mysql_query($sql,$conn);
       $m=0;
       $j=0;
       $arr=array();
       while($rows=mysql_fetch_row($result)){
       $sqlstr1="select * from tb_spliter where up_spliter = '".$rows[0]."'"; //判断顶级设备下的一级设备
       $result1=mysql_query($sqlstr1,$conn);
       $num=mysql_num_rows($result1); 
       if(!$num){  //如果不存在一级设备
      //echo $rows[1]." ".$m."没有下级<br/>";
       $arr[$j][$m]=$rows[1];
         }else{
             //echo $rows[1]." ".$m."有下级<br/>";
              $arr[$j][$m]= list_first($rows[0],$m,$j);  //list_first轮询一级设备
         }
         $m+=1;
         $j+=1;
        }
        print_r($arr);
    function list_first($aa,$m,$j){
     include "../conn/conn.php";
     $arra=array();
         $sql="select * from tb_spliter where up_spliter = '".$aa."'";//list_first轮询一级设备
         $result = mysql_query($sql,$conn);
         while($rows2 = mysql_fetch_row($result)){
         $sqlstr1 = "select * from tb_spliter where up_spliter = '".$rows2[0]."'"; //判断一级设备下是否有分支设备
         $result1 = mysql_query($sqlstr1,$conn);
         $nu = mysql_num_rows($result1);
          if(!$nu){    
            // echo $rows2[1]." ".$m."没有下级<br/>";
              $arra[$j][$m]=$rows2[1];
         }else{
            // echo $rows2[1]." ".$m."有下级<br/>";
              $arra[$j][$m]= list_first($rows2[0],$m);  //list_first轮询设备
         }
         $m+=1;
         $j+=1;
         }
         return $arra;
        }?>
    结果如下::Array
    (
        [0] => Array
            (
                [0] => Array
                    (
                        [0] => Array
                            (
                                [0] => a1
                            )                    [1] => Array
                            (
                                [1] => a2
                            )                    [2] => Array
                            (
                                [2] => a3
                            )                    [3] => Array
                            (
                                [3] => a4
                            )                )        )    [1] => Array
            (
                [1] => Array
                    (
                        [1] => Array
                            (
                                [1] => b1
                            )                    [2] => Array
                            (
                                [2] => b2
                            )                    [3] => Array
                            (
                                [3] => b3
                            )                    [4] => Array
                            (
                                [4] => b4
                            )                    [5] => Array
                            (
                                [5] => b5
                            )                    [6] => Array
                            (
                                [6] => Array
                                    (
                                        [] => Array
                                            (
                                                [6] => b61
                                            )                                    [1] => Array
                                            (
                                                [7] => b62
                                            )                                )                        )                )        ))
    层次出来了,就是不知道怎么达到那样的目的。