求个小功能写法

xuhui37208 2012-02-09 12:09:41
有一个分类表 calss

ID -----唯一标识
pid -----父级ID
name -----名字
path -----路径

CREATE TABLE `calss` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pid` int(11) NOT NULL DEFAULT '0',
`name` varchar(32) NOT NULL,
`path` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;



现在求一个路径的写法

例如数据如下

INSERT INTO calss VALUES ('1', '0', 'WEB开发',web);
INSERT INTO calss VALUES ('2', '1', '后端',control);
INSERT INTO calss VALUES ('3', '2', '语言',language);
INSERT INTO calss VALUES ('4', '2', '数据库',data);
INSERT INTO calss VALUES ('5', '3', 'php',php);
INSERT INTO calss VALUES ('6', '3', 'jsp',jsp);
INSERT INTO calss VALUES ('7', '3', 'asp',asp);
INSERT INTO calss VALUES ('8', '0', '手机应用开发',phone);
INSERT INTO calss VALUES ('9', '8', 'ios',ios);

求 php类别的 路径
最终结果如下格式
$php_path="web/control/language/php/";


求个具体php代码实现 感激不尽 据说用到递归思想 我看了一天递归 楞是没看明白 递归的思想

可否能不用递归实现,用递归实现的 请帮忙写清楚每一句代码注释 感激不尽了


最后一句 老大 你好 妞哥 你好
...全文
160 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuhui37208 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 amani11 的回复:]

你搜索php,发现pid是3

搜索id为3的,发现pid是2

……
某个pid为0,终止这个过程,,逆序就是路径
[/Quote]

不太明白 求码 求一个统一写法啊 我不一定非要求PHP类的路径 我还有可能求别的类路径 万分感谢
amani11 2012-02-09
  • 打赏
  • 举报
回复
你搜索php,发现pid是3

搜索id为3的,发现pid是2

……
某个pid为0,终止这个过程,,逆序就是路径
xuhui37208 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 foolbirdflyfirst 的回复:]

PHP code
<?php
//自己生成一个字段id为数组key的数组
$a[1] = array('1', '0', 'WEB开发','web');
$a[2] = array('2……
[/Quote]
谢谢哦 有俩个函数没用过 我仔细看看
xuhui37208 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 phpnewnew 的回复:]
可以按照他们说的循环SQL获取

也可以...随便写的,能看懂了自己再改哈
PHP code


//SELECT id,pid,path FROM calss;取得数据集组合成下面的数组
$array = array('1' => 0, '2' => 1, '3' => 2, '4' => 2, '5' => 3, '6' => 3, '7' => 3, '8' => 0, '9' =>……
[/Quote]牛哥 还是用到了递归啊
foolbirdflyfirst 2012-02-09
  • 打赏
  • 举报
回复
<?php
//自己生成一个字段id为数组key的数组
$a[1] = array('1', '0', 'WEB开发','web');
$a[2] = array('2', '1', '后端','control');
$a[3] = array('3', '2', '语言','language');
$a[4] = array('4', '2', '数据库','data');
$a[5] = array('5', '3', 'php','php');
$a[6] = array('6', '3', 'jsp','jsp');
$a[7] = array('7', '3', 'asp','asp');
$a[8] = array('8', '0', '手机应用开发','phone');
$a[9] = array('9', '8', 'ios','ios');
function getPath($id,$arr)
{
$path = array();
while(isset($arr[$id]))
{
array_unshift($path,$arr[$id][3]);
$id = $arr[$id][1];
}
return $path;
}
echo implode(DIRECTORY_SEPARATOR,getPath(5,$a));
echo PHP_EOL;
echo implode(DIRECTORY_SEPARATOR,getPath(7,$a));
echo PHP_EOL;
echo implode(DIRECTORY_SEPARATOR,getPath(4,$a));
?>

xuhui37208 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 phpnewnew 的回复:]
可以按照他们说的循环SQL获取

也可以...随便写的,能看懂了自己再改哈
PHP code


//SELECT id,pid,path FROM calss;取得数据集组合成下面的数组
$array = array('1' => 0, '2' => 1, '3' => 2, '4' => 2, '5' => 3, '6' => 3, '7' => 3, '8' => 0, '9' =>……
[/Quote]牛哥荡漾 牛哥风骚 牛哥威武 牛哥霸气
黄袍披身 2012-02-09
  • 打赏
  • 举报
回复
可以按照他们说的循环SQL获取

也可以...随便写的,能看懂了自己再改哈


//SELECT id,pid,path FROM calss;取得数据集组合成下面的数组
$array = array('1' => 0, '2' => 1, '3' => 2, '4' => 2, '5' => 3, '6' => 3, '7' => 3, '8' => 0, '9' => 8);
$pathArray = array(1 => 'web', 2 => 'control', 3 => 'language', 4 => 'data', 5 => 'php', 6 => 'jsp', 7 => 'asp', 8 => 'phone', 9 => 'ios');
//取得id列表
$idArry=array();
getTopID(5, $array);
//循环id列表输出最后结果
echo listPath(5, $idArr, $pathArray), "\n";
unset($idArr);
getTopID(6, $array);
echo listpath(6, $idArr, $pathArray), "\n";
unset($idArr);
getTopID(8, $array);
echo listpath(8, $idArr, $pathArray), "\n";
unset($idArr);
getTopID(9, $array);
echo listpath(9, $idArr, $pathArray), "\n";
unset($idArr);

//函数
/**
* 取得上级Id数组
* @param $id
* @param $array
* @return array
*/
function getTopID($id, $array)
{
global $idArr;
if (isset($array[$id])) {
$idArr[] = $array[$id];
getTopID($array[$id], $array);
}
}

/**
* 根据上级ID数组排序结果
* @param $id
* @param $list
* @param $array
* @return string
*/
function listPath($id, $list, $array)
{
$path = '';
array_push($list, $id);
sort($list);
foreach ($list as $value) {
if (isset($array[$value])) {
$path .= $array[$value] . '/';
}
}
return $path;
}

输出结果
web/control/language/php/
web/control/language/jsp/
phone/
phone/ios/
一起混吧 2012-02-09
  • 打赏
  • 举报
回复
其他的也是同一个道理. 按那个顺序查找到pid为0即为顶端。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧