正確答案:
感謝代碼宇宙
$i=0; if ($i % 5 == 0) { echo ''; } echo '...'; if ($i % 5 == 4) { echo ''; } $i++;if ($i % 5 != 0) { echo '';}
原文內容:
注意,這是一個細思極恐的問題,請仔細閱題!
首先,有一個不能改變的條件,就是迴圈輸出內容的代碼,例如
//此處將迴圈輸出多篇文章
我需要輸出的HTML格式如下
... ... ... ... ... //一共五篇,也就是5個POST ... ... ... ... ... ... ... ... ... ...
條件:
文章數量不確定,一定>5
每隔5篇文章,需要使用一個Box的div包裹(痛點在此,第一次輸出,第五次輸出)
你不可以把每5個post存一下其他地方,然後最後一起輸出!
一個栗子?:
假設我有11篇文章,那麼我的html最終格式應該是
... ... ... ... ... ... ... ... ... ... ...
這時候我的PHP代碼應該是怎麼樣的呢?
我的嘗試:
...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 ... ... ... ... ... ... ... ... ... ...
條件:
文章數量不確定,一定>5
每隔5篇文章,需要使用一個Box的div包裹(痛點在此,第一次輸出,第五次輸出)
你不可以把每5個post存一下其他地方,然後最後一起輸出!
一個栗子?:
假設我有11篇文章,那麼我的html最終格式應該是
... ... ... ... ... ... ... ... ... ... ...
這時候我的PHP代碼應該是怎麼樣的呢?
我的嘗試:
...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整除,最後必然剩下一組未封口。所以迭代結束後必須要有一個檢查。
燒腦可以,實際工程切勿如此耍巧。請老老實實的在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;