• 技术文章 >后端开发 >php教程

    烧脑题,有一个程序循环逻辑问题,急在线等

    2016-06-06 20:22:58原创503
    正确答案:
    感谢代码宇宙

    $i=0;
    
        if ($i % 5 == 0) {
            echo '
    '; } echo '
    ...
    '; if ($i % 5 == 4) { echo '
    '; } $i++; if ($i % 5 != 0) { echo '
    '; }

    原文内容:
    注意,这是一个细思极恐的问题,请仔细阅题!

    首先,有一个不能改变的条件,就是循环输出内容的代码,例如

    
    
    //此处将循环输出多篇文章
    
    

    我需要输出的HTML格式如下

    ...
    ...
    ...
    ...
    ...
    //一共五篇,也就是5个POST
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...

    条件:

    1. 文章数量不确定,一定>5

    2. 每隔5篇文章,需要使用一个Box的div包裹(难点在此,第一次输出

      ,第五次输出

    3. 你不可以把每5个post存一下其他地方,然后最后一起输出!

    一个栗子?:
    假设我有11篇文章,那么我的html最终格式应该是

    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...

    这时候我的PHP代码应该是怎么样的呢?

    我的尝试:

    ';$qp_a++;} ?> ...post ';} ?>

    这个方式的弊端是只能是IF里面规定的数值外,还必须是可以整除的文章数量。

    可能你想到了用$i++ 之类的判断5次后输出,之类的,但是请注意,第一次循环需要echo出

    这个标签的闭合需要在第五次输出后加上,也就是echo一个

    提要:
    关于周神的回答

    = =!!! 这不是很简单吗... 有毛难度啊
    
    $postCount=0; //文章计数
    echo '
    '; //此处将循环输出多篇文章 $postCount++; if( $postCount > 1 && $postCount% 5 == 1 ){ echo '
    '; }else{ echo '
    ...
    '; } echo '
    ';

    结果:

    第一个5个,第二三个4个,剩下空白

    参考:

    ';
    ?>
     1 && $a % 5 == 1) {
            echo '
    '; } else { echo '
    内容
    '; } } ?> '; ?>

    效果:http://www.presscode.cn/temp.php

    回复内容:

    正确答案:
    感谢代码宇宙

    $i=0;
    
        if ($i % 5 == 0) {
            echo '
    '; } echo '
    ...
    '; if ($i % 5 == 4) { echo '
    '; } $i++; if ($i % 5 != 0) { echo ''; }

    原文内容:
    注意,这是一个细思极恐的问题,请仔细阅题!

    首先,有一个不能改变的条件,就是循环输出内容的代码,例如

    
    
    //此处将循环输出多篇文章
    
    

    我需要输出的HTML格式如下

    ...
    ...
    ...
    ...
    ...
    //一共五篇,也就是5个POST
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...

    条件:

    1. 文章数量不确定,一定>5

    2. 每隔5篇文章,需要使用一个Box的div包裹(难点在此,第一次输出

      ,第五次输出

    3. 你不可以把每5个post存一下其他地方,然后最后一起输出!

    一个栗子?:
    假设我有11篇文章,那么我的html最终格式应该是

    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...
    ...

    这时候我的PHP代码应该是怎么样的呢?

    我的尝试:

    ';$qp_a++;} ?> ...post ';} ?>

    这个方式的弊端是只能是IF里面规定的数值外,还必须是可以整除的文章数量。

    可能你想到了用$i++ 之类的判断5次后输出,之类的,但是请注意,第一次循环需要echo出

    这个标签的闭合需要在第五次输出后加上,也就是echo一个

    提要:
    关于周神的回答

    = =!!! 这不是很简单吗... 有毛难度啊
    
    $postCount=0; //文章计数
    echo '
    '; //此处将循环输出多篇文章 $postCount++; if( $postCount > 1 && $postCount% 5 == 1 ){ echo '
    '; }else{ echo '
    ...
    '; } echo '
    ';

    结果:

    第一个5个,第二三个4个,剩下空白

    参考:

    ';
    ?>
     1 && $a % 5 == 1) {
            echo '
    '; } else { echo '
    内容
    '; } } ?> '; ?>

    效果:http://www.presscode.cn/temp.php

    $i=0;
    echo '
    '; if ($i > 0 && $i % 5 == 0) { echo '
    '; } echo '
    ...
    '; $i++; echo '
    ';
    $i=0;
    
        if ($i % 5 == 0) {
            echo '
    '; } echo '
    ...
    '; if ($i % 5 == 4) { echo '
    '; } $i++; if ($i % 5 != 0) { echo ''; }
    
        echo '
    '; echo '
    ...
    '; if (have_posts()) { the_post(); echo '
    ...
    '; } else { echo '
    '; break; } if (have_posts()) { the_post(); echo '
    ...
    '; } else { echo ''; break; } if (have_posts()) { the_post(); echo '
    ...
    '; } else { echo ''; break; } if (have_posts()) { the_post(); echo '
    ...
    '; } echo '';
    
        echo '
    '; echo '
    ...
    '; if (have_posts()) { the_post(); echo '
    ...
    '; if (have_posts()) { the_post(); echo '
    ...
    '; if (have_posts()) { the_post(); echo '
    ...
    '; if (have_posts()) { the_post(); echo '
    ...
    '; } } } } echo '
    ';

    = =!!! 这不是很简单吗... 有毛难度啊

    $postCount=0; //文章计数
    echo '

    ';

    //此处将循环输出多篇文章
    $postCount++;
    echo '
    ...
    ';
    if( $postCount > 1 && $postCount% 5 == 1 ){

    echo '
    ';

    }


    echo '

    ';

    $a = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17);
    $s = array();
    foreach($a as $k=>$v){
        if(count($s) === 5){ 
           echo '
    '; foreach($s as $key=>$val){ echo '
    '.$val.'
    '; } echo '
    '; unset($s); $s = array(); $s[] = $v; }else{ $s[] = $v; } } if(count($s) > 0){ echo '
    '; foreach($s as $key=>$val){ echo '
    '.$val.'
    '; } echo '
    '; unset($s); }

    ?>

    问题描述的有点简单啊。不过要计数起码要有个产量吧,设置一个i每输出一次i+1,自己尝试一下,这肯定不难实现吧

    这个和我以前,做的显示图片一样,5张一列显示。
    数据结构:
    list

    最终输出结构list

    第二个listi的大小为5,把数据依次放到listi中,最后用listi放入list,页面输出listi就可以了。

    规则其实不难梳理。盯住“已经写入DOM的节点数有多少个”,然后把适当的事件同时插入到节点写入DOM的前后,并不难做。

    这个问题唯一的麻烦是:迭代过程中,我们无法知道本次迭代是最后一次。因此迭代结束后,如果总数不被5整除,最后必然剩下一组未封口。所以迭代结束后必须要有一个检查。

    '.PHP_EOL);
    define("DIV_CONTAINER_END",   ''.PHP_EOL);
    define("DIV_BOX_START", '  '.'
    '.PHP_EOL); define("DIV_BOX_END", ' '.'
    '.PHP_EOL); define("DIV_POST_FORMAT", ' '.'
    %s
    '.PHP_EOL); define("GROUP_BY", 5); $items = range(1, 11); // try changing $max to 9, 10, 11. echo DIV_CONTAINER_START; $written_to_dom = 0; foreach ($items as $item) // 本行相当于 while(have_posts()):the_post(); 即准备文章内容 { if ($written_to_dom % GROUP_BY == 0) { echo DIV_BOX_START; } echo sprintf(DIV_POST_FORMAT, $item); // 本行相当于 the_content(); 即输出文章内容 $written_to_dom += 1; if ($written_to_dom % GROUP_BY == 0) { echo DIV_BOX_END; } } // 本行相当于HTML/PHP混写时循环语法的 endwhile; 以及后边的 wp_reset_query(); if ($written_to_dom % GROUP_BY != 0) { echo DIV_BOX_END; } echo DIV_CONTAINER_END;

    烧脑可以,实际工程切勿如此耍巧。请老老实实的在V(View)层抛弃这种取一个输出一个的循环方式。

    你需要一次取一批(5个或取到底),然后无脑套一个

    分组输出。适合实际工程的循环方法(伪代码)应该是这样的:

    define("POSTS_PER_GROUP", 5);
    echo "div container start";
    while (have_posts())
    {
        $posts_grouped = [];
        for ($i=0; $icontent;
        }
        echo "div group end";
    }
    echo "div container end"

    题主在题面中否定的“把每5个post存一下其他地方,然后最后一起输出”,其实在实际工程中恰恰是对的。别忘记就好。

    我提供我的方法供参考:

    if ( have_posts() ) :
    
        global $wp_query;
    
        while ( $splice_post = array_splice( $wp_query->posts, 0, 5 ) ) {
    
            printf( '
    '); foreach( $splice_post as $key => $post ) { setup_postdata( $post ); the_title(); } printf( '
    '); } endif;
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php html html5 wordpress
    上一篇:一段C语言程序从编译的到软件打开整个过程是怎样的? 下一篇:php-fpm - OSX PHP56 nginx 服务器 权限问题,导致php链接500错误
    Web大前端开发直播班

    相关文章推荐

    • 深入浅析PHP文件包含漏洞• PHP关于ajax中在Html页面方法传值有关问题 • 对一个php开发的页逛的一些技术优化的comment • 新手 cookie登陆有关问题 • php-GD库函数(3)
    1/1

    PHP中文网