V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kojp
V2EX  ›  问与答

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

  •  
  •   kojp · 2011-06-13 17:44:07 +08:00 · 4005 次点击
    这是一个创建于 4905 天前的主题,其中的信息可能已经有所发展或是发生改变。
    类别A:
    类别B:
    类别C:
    类别....:
    类别H:

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

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

    现在的困境是:
    怎么实现第二个要求?
    21 条回复    1970-01-01 08:00:00 +08:00
    kojp
        1
    kojp  
    OP
       2011-06-13 17:47:06 +08:00
    给个思路,谢谢.

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

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


    对了程序是用PHP的.
    kojp
        2
    kojp  
    OP
       2011-06-13 17:47:26 +08:00
    和..SMARTY模板的....
    reus
        3
    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
        4
    reus  
       2011-06-13 17:54:34 +08:00
    else {
    echo xxxxx;
    }
    darasion
        5
    darasion  
       2011-06-13 17:55:29 +08:00
    楼主颠三倒四的说话,晕了,我都,让我。...
    killall
        6
    killall  
       2011-06-13 17:56:55 +08:00
    嗯,我承认我也晕了,而且是极晕
    kojp
        7
    kojp  
    OP
       2011-06-13 17:59:50 +08:00
    !!!!!
    @reus

    谢谢~~~~~~

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

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

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

    折腾一两个小时终于搞定~~~~其中遇到一个数组排序的问题,没弄明白....后来就直接绕行了..估计跟某个函数有关.......帖上代码也许你们看得累.....不好意思
    kojp
        19
    kojp  
    OP
       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
        20
    kojp  
    OP
       2011-06-13 20:23:41 +08:00
    谢谢亲们哦~~~~~~

    见笑了,基本工不扎实,搞稍微大一点的项目就会累得半死~~~~~看来,还得继续加强基本工的练习~~尤其是逻辑方面的.
    CoX
        21
    CoX  
       2011-06-13 20:50:18 +08:00
    排序就是查询的时候 order by 一下就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2610 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 02:50 · PVG 10:50 · LAX 18:50 · JFK 21:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.