ホームページ >バックエンド開発 >PHPチュートリアル >ツリー結果をファイルに出力する方法

ツリー結果をファイルに出力する方法

WBOY
WBOYオリジナル
2016-06-23 14:08:181062ブラウズ

初心者が助けを求めたいのですが、1. データベースのメインフィールドのsplit_nameとup_spliterのツリー構造をここに書きました。要件を満たしているかどうかを確認してください。 2. データベース内のこれら 2 つの項目が a.txt に出力されます。結果は、a.txt に示されているとおりです。私にアドバイスを。以下はデータベース、ツリー出力、必要なエフェクトなどのファイルです。
************************** tb_spliter.sql ******************** **

-- phpMyAdmin SQL ダンプ
-- バージョン 3.5.4
-- http://www.phpmyadmin.net
--
-- ホスト: localhost
-- 生成日: 2013 年 5 月 1 日 11:02
-- サーバー バージョン: 5.5.18
-- PHP バージョン: 5.4.0RC4

SET 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 */;

- -
-- データベース: `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`) 値
(81, 'a1', 1, 'xt', 'a', 'None', 69, 217, 'haha', 0, '2013-04-28 00:24:52', '0', '0', 1, 'qd'),
(80, 'a2', 1, 'xt', 'a ', 'なし', 69, 217, 'haha', 0, '2013-04-28 00:24:52', '0', '0', 1, 'qd'),
(79, 'a3 ', 1, 'xt'、'a'、'なし'、69、217、'haha'、0、'2013-04-28 00:24:52'、'0'、'0'、1、' qd')、
(78, 'a4', 1, 'xt', 'a', 'none', 69, 217, 'haha', 0, '2013-04-28 00:24:52', ' 0', ' 0', 1, 'qd'),
(69, 'a', 1, 'xt', 'None', 'None', 0, 217, 'haha', 0, '2013-04 -28 00: 15:20', '0', '1', 1, 'qh'),
(82, 'b', 1, 'xt', 'なし', 'なし', 0, 217, 'haha', 0, '2013-05-01 10:22:51', '0', '1', 3, 'qh'),
(83, 'b1', 1, 'xt', 'b ', 'なし', 82, 217, 'haha', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(84, 'b2 ', 1, 'xt', 'b', 'なし', 82, 217, 'haha', 0, '2013-05-01 10:23:53', '0', '0', 3, ' qh')、
(85, 'b3', 1, 'xt', 'b', 'none', 82, 217, 'haha', 0, '2013-05-01 10:23:53', ' 0', ' 0'、3、'qh')、
(86, 'b4', 1, 'xt', 'b', 'なし', 82, 217, 'haha', 0, '2013-05-01 10:23:53', '0', '0 ', 3, 'qh'),
(87, 'b5', 1, 'xt', 'b', 'なし', 82, 217, 'hh', 0, '2013-05-01 10:23 :53', '0', '0', 3, 'qh'),
(88, 'b6', 1, 'xt', 'b', '無', 82, 217, 'haha', 0 、'2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(89, 'b61', 1, 'xt', 'b', '無し' , 88, 217, 'haha', 0, '2013-05-01 10:23:53', '0', '0', 3, 'qh'),
(90, 'b62', 1, ' xt', 'b', '無し', 88, 217, 'haha', 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 ********************* *

aa913d560f9c76543a44e2ffb6350fa0";
}else{
echo "$b=".$rows[1]." ".$m."有下级076402276aae5dbec7f672f8f4e5cc81";
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."没有下级076402276aae5dbec7f672f8f4e5cc81";
}else{
echo $rows2[1]." ".$m."有下级076402276aae5dbec7f672f8f4e5cc81";
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;





ディスカッションへの返信 (解決策)

基本アルゴリズム

$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] => [up_spliter] => 0
[spliter_name] => a
[child] => Array
[id] = >                            [spliter_name] => a1
)

)

)

[82] => 配列
(
[id] => 82
[up_spliter] => 0
[spliter_name] => b [子] => 配列
(
[83] => 配列
(
[id ] => 83
[up_spliter] => 82
[spliter_name] => b1 )
[84] => 配列
(
[id] => 84
[up_spliter] =>
.配列
(
[id] => 85
[up_spliter] => ; 82
[スプリッター名] => b3 )
[ 86] => 配列 (
                            [id] => 86
[up_spliter] => 82
[スプリッター名] => b4
)
[87] => 配列

[id] => 87
[up_spliter] => 82
[spliter_name] =>b5
) array

[id] => 88
[up_spliter] =>82
[spliter_name] =>b6
[child] => array

[89] => array ] => 89
[up_spliter] => 88
[スプリッター名] => b61

[90] = & gt; 配列
(
[ID] = & gt; 90
[up_spliter] = & gt; 88
[spliter_name] = & gt; b62
)
)
)
)


は多次元配列です
目的は階層を表示することです

ボス、私は長い間配列を走査して a-a1;a-a2;....a.txt のような結果を生成しようとしてきました、それでもうまくいきませんので、もう一度お力をお貸しください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。