1
rivsen 2012-08-31 12:37:25 +08:00 1
一行行读,然后数空格。。。
然后这个操作作成一个迭代循环,最后搞成个关联数组 然后把数组打印出来 |
2
reus 2012-08-31 12:37:53 +08:00 1
超越自己能力的算法,自己想出来,可以功力大增,这是一次提升技术水平的机会啊
|
3
rivsen 2012-08-31 12:40:48 +08:00
我以前写过一个读取firefox导出的json格式书签的函数,自己打印出来看,因为当时那个版本firefox的书签管理不太好看,就打印成html格式的了,嘿嘿,最关键的就是那个循环
|
4
rivsen 2012-08-31 12:41:58 +08:00 1
对了,试试yaml样式吧,如果这个txt可以兼容yaml格式,那就可以直接用库来解决啦!
|
5
haiyang416 OP |
6
reus 2012-08-31 12:46:35 +08:00 1
先从最简单的情况做起
a 写程序让他输出 <li>a</a> 然后增加一种输入 a b 修改程序让它输出 <li>a</li> <li>b</li> 然后 a b 输出 <li> <ul><li>b</li></ul> </li> 然后 a b c 输出 <li> <ul> <li>b</li> <li>c</li> </ul> </li> 重复这个步骤,从简单的输入到复杂的输入,不断修改程序,让程序的输出和预想的输出一致,最终就可以得到可以处理复杂的输入的程序了 |
7
haiyang416 OP @reus 接受意见,我自己再想另一种办法来实现,看能不能漂亮一些。
|
8
reus 2012-08-31 12:47:53 +08:00 1
缩进不见了………… 不过你懂的
|
9
zooandzoo 2012-08-31 13:22:34 +08:00 1
这种算法常用语无限分类高效查询,树结构左右分值。。。查询简单,难在如何对节点的增、删、改查、移动、赋值
本身就是为了解决递归才用这中算法的,如果在其中用到了递归说明你的思路是错误的~! <?php function getList(){ $start=1; $items = $menu->getItems(); /* * $items=array( array( 'title'=>'类别名称', 'deeper'=>false, 'shallower'=>false, 'level_diff'=>0 'level'=>2 //缩进等级 ) ); */ $lastitem = 0; if ($items) { foreach($items as $i => $item) { //初始化 $item['deeper'] = false; $item['shallower'] = false; $item['level_diff'] = 0; if (isset($items[$lastitem])) { $items[$lastitem]['deeper'] = ($item['level'] > $items[$lastitem]['level']); //该类菜单是否有子菜单 $items[$lastitem]['shallower'] = ($item['level'] < $items[$lastitem]['level']); //是否是该级别的最后一个 $items[$lastitem]['level_diff'] = ($items[$lastitem]['level'] - $item['level']); //级别差用来闭合UL和LI的 } $lastitem= $i; } //用来闭合最顶级ROOT标签 if (isset($items[$lastitem])) { $items[$lastitem]['deeper'] = (($start?$start:1) > $items[$lastitem]['level']); $items[$lastitem]['shallower'] = (($start?$start:1) < $items[$lastitem]['level']); $items[$lastitem]['level_diff'] = ($items[$lastitem]['level'] - ($start?$start:1)); } } return $items; } ?> <ul> <?php $list=getList(); foreach ($list as $i => $item) : echo '<li>'; echo '<a href="#">'.$item['title'].'</a>'; if ($item->deeper) { echo '<ul>'; } elseif ($item->shallower) { echo '</li>'; echo str_repeat('</ul></li>', $item->level_diff); } else { echo '</li>'; } endforeach; ?> </ul> |
10
haiyang416 OP |