php 循环结构的联系题,php - 烧脑题,有一个程序循环逻辑问题,急在线等

黄舟2017-04-10 16:28:212楼

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

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

header("Content-Type: text/plain");

define("p_CONTAINER_START", '

'.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; $i

$posts_grouped[] = get_post();

}

echo "p group start";

foreach ($posts_grouped as $post) {

echo "p single post" . $post->content;

}

echo "p group end";

}

echo "p container end"

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值