php - 烧脑题,有一个程序循环逻辑问题,急在线等
ringa_lee
ringa_lee 2017-04-10 16:26:21
0
7
631

正确答案:
感谢代码宇宙

$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的p包裹(难点在此,第一次输出

    ,第五次输出

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

一个栗子

ringa_lee
ringa_lee

ringa_lee

répondre à tous (7)
Ty80
$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,自己尝试一下,这肯定不难实现吧

          Peter_Zhu

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

          最终输出结构list

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

            黄舟

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

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

            '.PHP_EOL); define("p_CONTAINER_END", '

            '.PHP_EOL); define("p_BOX_START", ' '.'

            '.PHP_EOL); define("p_BOX_END", ' '.'

            '.PHP_EOL); define("p_POST_FORMAT", ' '.'

            %s

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

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

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

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

            define("POSTS_PER_GROUP", 5); echo "p container start"; while (have_posts()) { $posts_grouped = []; for ($i=0; $icontent; } echo "p group end"; } echo "p 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;
                Derniers téléchargements
                Plus>
                effets Web
                Code source du site Web
                Matériel du site Web
                Modèle frontal
                À propos de nous Clause de non-responsabilité Sitemap
                Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!