0

0

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

php中文网

php中文网

发布时间:2016-06-06 20:22:58

|

1626人浏览过

|

来源于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;

    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最终格式应该是

PDFlux
PDFlux

PDF内容提取+智能问答神器,结合了科研级精准的非结构化文档解析能力,以及ChatGPT的智能问答能力。

下载
...
...
...
...
...
...
...
...
...
...
...

这时候我的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;

相关文章

PHP扩展如何优化性能_PHP扩展性能优化技巧【建议】

phpstorm怎么打开php文件_phpstorm打开php文件设置步骤【教程】

网页嵌入php链接失败.htaccess配置错了吗_网页嵌入php链接失败htaccess检查法【排查】

怎么看源码php_看php源码方法与逻辑理解技巧【教程】

RSC是什么语言_PHP和它属于同类吗【分类】

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

上一篇:一段C语言程序从编译的到软件打开整个过程是怎样的? 下一篇:php-fpm - OSX PHP56 nginx 服务器 权限问题,导致php链接500错误

热门AI工具

更多

相关专题

更多
苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2025.12.24

拼豆图纸在线生成器
拼豆图纸在线生成器

拼豆图纸生成器有PixelBeads在线版、BeadGen和“豆图快转”;推荐通过pixelbeads.online或搜索“beadgen free online”直达官网,避开需注册的诱导页面。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

82

2025.12.24

俄罗斯搜索引擎yandex官方入口地址(最新版)
俄罗斯搜索引擎yandex官方入口地址(最新版)

Yandex官方入口网址是https://yandex.com。用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

546

2025.12.24

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

150

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

20

2025.12.24

Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

47

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

7

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

12

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

371

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

最新文章

更多
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号