2016-12-27 136 views
1

我在我的網站上遇到了一些問題。我有一個博客,每篇文章都在一個列表中。現在我想把這個列表分成3個列表。PHP:我如何將foreach循環分成3部分?

我的問題:

<ul class="row-3"> 
<?php $i = 1; foreach($posts as $post): ?> 
    <?php if($i % 3 == 0): ?> 
     <?php echo "$article" ?>    
    <?php endif; $i++; ?> 
<?php endforeach ?> 
</ul> 

<ul class="row-2"> 
<?php $i = 1; foreach($posts as $post): ?> 
    <?php if($i % 2 == 0): ?> 
     <?php echo "$article" ?>    
    <?php endif; $i++; ?> 
<?php endforeach ?> 
</ul> 

如果我做它像這樣將每三環路進入第三列表和每一個第二循環進入第二列表。但問題是:

第5條和10將兩個列表...

所以我對整個的foreach循環分爲3個部分,一個計數器計數,直到3,然後在3如果它再次變爲0,所以我可以把每1到第一個列表每2到第二個和每3到第三個列表 ,但我絕對不知道如何解決這個問題。

我希望你們能幫助我一下,我對我的英語不好對不起..

非常感謝。

回答

2

我不確定這會適用於您的訂購,但array_chunk,https://secure.php.net/manual/en/function.array-chunk.php可能會按照您的要求做。

這樣你就不必處理共享一個公倍數。

如果訂購是一個問題,那麼array_chunk頁面上有一個註釋,它有一些代碼可以執行array_chunk_vertical。這兩種方法中的一種應該可以幫助你獲得所需的東西。

類似下面這個未經測試的代碼:

//每個小組將在它自己的部分陣列。 $ sections = array_chunk($ posts,2);

+0

顯示如何使用.... –

+0

非常感謝!我想現在我可以用這些方法之一解決我的問題。 – UnknownProgrammer

0

所以soulution到我的小問題是很容易^^:

<?php 
function partition($list, $p) { 
    $listlen = count($list); 
    $partlen = floor($listlen/$p); 
    $partrem = $listlen % $p; 
    $partition = array(); 
    $mark = 0; 
    for ($px = 0; $px < $p; $px++) { 
     $incr = ($px < $partrem) ? $partlen + 1 : $partlen; 
     $partition[$px] = array_slice($list, $mark, $incr); 
     $mark += $incr; 
    } 
    return $partition; 
} 

$sec1 = partition($posts, 3); 
$sec2 = partition($posts, 3); 
$sec3 = partition($posts, 3); 
?> 

所以我發現對堆棧溢出至極此功能在3拆分陣列部分(或其他數字,而不是x:分區($ array,x);)。

那麼剩下很容易:

<?php foreach($sec1[0] as $post): ?> 
    ... 
<?php endforeach ?> 

我只需要爲每個列表以及每個列表一個foreach 3個部分。