发布时间:2014-09-05 10:27:55作者:知识屋
问题:请根据题干描述你的算法,有以下树形结构的文本数据:
部门A 职员1 职员2 部门B 职员3 职员4 部门C 职员5 职员6 部门A 职员1 职员2 部门B 职员3 职员4部门C 职员5 职员6
它们用最常用的table符号标识其数据结构,请使用PHP计算出每条数据的路径、是否是叶子节点并导入一张邻接表。
答案:
//使用换行符号分割数组 $arr = explode(PHP_EOL, PHP_EOL . $str); //用来存储路径的数组 $pathArr = array(); //储存结果的数组 $reArr = array(); //辅助变量 $lastPos = $lastPosPre = 0; foreach ($arr as $id => $v){ ///t出现的次数 $lastPos = strrpos ($v, "/t"); $lastPos = ($lastPos === FALSE)?0:$lastPos+1; //将路径压入数组 $pathArr[$lastPos] = $id; //计算出当前路径 $path = array_slice ($pathArr, 0, $lastPos); //计算父级id $pid = (int) isset ($pathArr[$lastPos - 1]) ? $pathArr[$lastPos - 1] : 0; //首次循环丢弃 if ($id == 0){continue;} //要写入数据库的数据 $reArr[$id] = array( 'id' => $id, 'pid' => $pid, 'is_leaf' => 1, 'path' => '/' . implode('/', $path), 'name' => ltrim($v, "/t") ); //是否叶子节点 if ($lastPos > $lastPosPre) { $reArr[$id-1]['is_leaf'] = 0; } //上一节循环中,/t出现的次数 $lastPosPre = $lastPos; } //使用换行符号分割数组$arr = explode(PHP_EOL, PHP_EOL . $str);//用来存储路径的数组$pathArr = array();//储存结果的数组$reArr = array();//辅助变量$lastPos = $lastPosPre = 0;foreach ($arr as $id => $v){ ///t出现的次数 $lastPos = strrpos ($v, "/t"); $lastPos = ($lastPos === FALSE)?0:$lastPos+1; //将路径压入数组 $pathArr[$lastPos] = $id; //计算出当前路径 $path = array_slice ($pathArr, 0, $lastPos); //计算父级id $pid = (int) isset ($pathArr[$lastPos - 1]) ? $pathArr[$lastPos - 1] : 0; //首次循环丢弃 if ($id == 0){continue;} //要写入数据库的数据 $reArr[$id] = array( 'id' => $id, 'pid' => $pid, 'is_leaf' => 1, 'path' => '/' . implode('/', $path), 'name' => ltrim($v, "/t") ); //是否叶子节点 if ($lastPos > $lastPosPre) { $reArr[$id-1]['is_leaf'] = 0; } //上一节循环中,/t出现的次数 $lastPosPre = $lastPos;}
这份答案,可以导入无限深的树形结构数据。不过未经优化,等已有有时间再琢磨琢磨。
如何对PHP文件进行加密方法 PHP实现加密的几种方式介绍
php生成圆角图片的方法 电脑中php怎么生成圆角图片教程
用PHP构建一个留言本方法步骤 php怎么实现留言板功能
php中三元运算符用法 php中的三元运算符使用说明
php文件如何怎么打开方式介绍 php文件用什么打开方法
PHP怎么插入数据库方法步骤 php编程怎么导入数据库教程
如何安装PHPstorm并配置方法教程 phpstorm安装后要进行哪些配置
PHP 获取远程文件大小的3种解决方法 如何用PHP获取远程大文件的大小
20个实用PHP实例代码 php接口开发实例代码详细介绍
如何架设PHP服务器方法步骤 怎么搭建php服务器简单教程