2016-12-27 5 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 будет в обоих списках ...

Так что я должен разделить весь Еогеасп петлю в 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); 
?> 

Так что я нашел эту функцию на переполнение стека Wich разделить массив в 3 (или любой другой номер, который вы используете вместо x: partition ($ array, x);).

Тогда остальное было легко:

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

я только должен был сделать 3 секции для каждого списка и Еогеасп для каждого списка.