见鬼的PHP逻辑问题.....求助~~

2011-06-13 17:44:07 +08:00
 kojp
类别A:
类别B:
类别C:
类别....:
类别H:

每个类别下面有好多条文章....

现在的要求是输出所有类别的文章标题并分页显示(这些都已经完成)
另外一个见鬼的要求是...每个类别的第一篇文章前面需要有类别的名字(这些都可以从数据库获取到)

现在的困境是:
怎么实现第二个要求?
3911 次点击
所在节点    问与答
21 条回复
kojp
2011-06-13 17:47:06 +08:00
给个思路,谢谢.

我的尴尬是...在循环里面....如果每篇文章都要求有类别名称,我就实现了(一开始就是这样的要求,后来要求改这那个见鬼的要求)....

我现在的思路只能是,根据每个分类的文章的篇数来决定神马时候出现分类名称...这样太复杂太难实现太累了都~~~~


对了程序是用PHP的.
kojp
2011-06-13 17:47:26 +08:00
和..SMARTY模板的....
reus
2011-06-13 17:53:44 +08:00
$showed_category = array();
foreach xxxx {
if (!in_array($category_name, $showed_category)) {
echo $category_name, xxxxxxxxx;
$showed_category[] = $category_name;
}
}
是这个意思么? = =
reus
2011-06-13 17:54:34 +08:00
else {
echo xxxxx;
}
darasion
2011-06-13 17:55:29 +08:00
楼主颠三倒四的说话,晕了,我都,让我。...
killall
2011-06-13 17:56:55 +08:00
嗯,我承认我也晕了,而且是极晕
kojp
2011-06-13 17:59:50 +08:00
!!!!!
@reus

谢谢~~~~~~

我明白了.
reus
2011-06-13 18:00:46 +08:00
就是把输出过的类别都记录下来
如果已经输出过了,就不输出了,否则就输出
这样就可以实现,只在第一个输出了
kojp
2011-06-13 18:02:05 +08:00
你明白了我....我也明白了你....

但是这个条件很难实现呀...!in_array($category_name, $showed_category)
kojp
2011-06-13 18:04:08 +08:00
[QUOTE]就是把输出过的类别都记录下来
如果已经输出过了,就不输出了,否则就输出
这样就可以实现,只在第一个输出了[/QUOTE]
明白..那我先前是误读了你的代码了..呵呵.我试试..这个思路很好~~~~谢谢.
reus
2011-06-13 18:05:19 +08:00
in_array就是个函数……判断一个元素在不在一个数组里面
你不是说类别名字可以从数据库得到么…… 哪里难实现了……
CoX
2011-06-13 18:13:27 +08:00
这要求很正常吧,就是分类显示文章主题吧
kojp
2011-06-13 18:25:48 +08:00
按REUS的方法在PHP里面的确是实现了...谢谢.

现在还得...跟万恶的SMARTY结合起来~~~~~
kojp
2011-06-13 18:26:44 +08:00
@CoX
不正常呀....至少对于我这么菜人来说不正常..呵呵.----------
CoX
2011-06-13 18:27:23 +08:00
最笨的方法,就是多查几次数据库,每个分类查一次数据库。
聪明一点的方法,查询的结果按分类排序,用一个临时变量保存当前分类;判断当前主题分类和临时变量保存数据是否一致,一致就忽略,不一致就输出,并保存新分类到临时变量。
holystrike
2011-06-13 19:06:39 +08:00
完整的需求还需要比较数组下一个元素的分类
reus
2011-06-13 19:39:27 +08:00
据说Twig比smarty好
kojp
2011-06-13 20:16:45 +08:00
好吧...谢谢各位.

折腾一两个小时终于搞定~~~~其中遇到一个数组排序的问题,没弄明白....后来就直接绕行了..估计跟某个函数有关.......帖上代码也许你们看得累.....不好意思
kojp
2011-06-13 20:21:14 +08:00
[code]
$showed_category = array();
while($re1r = $db->getarray($re1s)) {

$lid = $re1r['lid'];
$lsre2s = $db->query("select * from {$prefix}_mag_ls where id='$lid'");
$lsre2r = $db->getarray($lsre2s);
$re1r['lname'] = $lsre2r['cn_title'];
$re1r['vol']=$vol;

if(!in_array($lid,$showed_category)){
//echo $lid;
$re1r['dddname']=1848;
$showed_category[]=$lid;
}else{
//echo 'ccc';
$re1r['dddname']=0;
}
$mag_list_array[] = smarrayall($re1r);

}

[/code]

还是用的reus的思路....其实就是求一个标志位....用SMARTY根据那个标志位为决定显示分类名称还是不显示.


下面是前台页面.
[code]
<div>
<!--{section name=loop loop=$mag_list}-->
<!--{if $mag_list[loop].dddname==1848}--><div id="mag_list_l_name">¡ù<b><!--{$mag_list[loop].lname}--></b>¡ù</div><!--{/if}-->

<div class="mag_list">

<dt><!--{$mag_list[loop].art_author}--></dt>
<dt><!--{$mag_list[loop].art_name}--></dt>
<dd><!--{$mag_list[loop].vol}-->&nbsp;&nbsp;<!--{$mag_list[loop].art_page}--></dd>
.....................
</div>
[/code]
[/code]
kojp
2011-06-13 20:23:41 +08:00
谢谢亲们哦~~~~~~

见笑了,基本工不扎实,搞稍微大一点的项目就会累得半死~~~~~看来,还得继续加强基本工的练习~~尤其是逻辑方面的.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/14399

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX