Вложенный цикл PHP

Новичок PHP здесь. Я хотел бы попросить немного помощи с моим вложенным циклом. Я думаю, что я близок, но я почти уверен, что мне не хватает переключателя, или перерыва, или того и другого. Я возился с этим какое-то время, но я просто не могу понять это правильно. Вот пример кода.

<?php $items=array(thing01,thing02,thing03,thing04,thing05,thing06,thing07,thing08,thing09,thing10,thing11,thing12,thing13,thing14,thing15,thing16,thing17,thing18,thing19,thing20,thing21,thing22,thing23,thing24,thing25,thing26,thing27,thing28,thing29,thing30,thing31,thing32); ?>
<?php $array_count = count($items); ?>
<?php $item_count = 9; ?>
<?php $blk_Number = ceil( $array_count / $item_count); ?>
<?php echo "<h3>This list should contain " . $array_count . " items</h3>"; ?>
<ul>
<?php
for ($pas_Number = 1; $pas_Number <= $blk_Number; $pas_Number++) {print "<h3>Start of Block " . $pas_Number . " of 9         items</h3>";
for ($key_Number = 0; $key_Number < $item_count; $key_Number++){print "<li>" . $items[$key_Number] . "</li>"; }
{print "<h3>End of Block " . $pas_Number . " of 9 items</h3>"; }
}
; ?>
</ul>

Это дает мне вывод:

Этот список должен содержать 32 пункта

Start of Block 1 of 9 items
thing01
thing02
thing03
thing04
thing05
thing06
thing07
thing08
thing09
End of Block 1 of 9 items
Start of Block 2 of 9 items
thing01
thing02
thing03
thing04
thing05
thing06
thing07
thing08
thing09
End of Block 2 of 9 items
Start of Block 3 of 9 items
thing01
thing02
thing03
thing04
thing05
thing06
thing07
thing08
thing09
End of Block 3 of 9 items
Start of Block 4 of 9 items
thing01
thing02
thing03
thing04
thing05
thing06
thing07
thing08
thing09
Start of Block 4 of 9 items
thing01
thing02
thing03
thing04
thing05
thing06
thing07
thing08
thing09
End of Block 4 of 9 items

Как видите, количество элементов массива неправильное. Блок 2 должен содержать вещи 10-18, Блок 3 должен содержать вещи 19-27, а Блок 4 должен содержать оставшиеся 5 «вещей». Я прошу прощения за все глупые элементы в массиве, но я хотел четко объяснить, что я пытаюсь сделать.


person David Ramirez    schedule 15.08.2012    source источник


Ответы (2)


Я думаю, вы хотите использовать array_chunk():

foreach (array_chunk($items, 9) as $nr => $block) {
    echo "Block $nr\n";
    foreach ($block as $item) {
        echo "\t$item\n";
    }
}
person Ja͢ck    schedule 15.08.2012
comment
Вау... никогда не знал о array_chunk. Он отлично работал! спасибо - person David Ramirez; 15.08.2012

Заменять

for ($key_Number = 0; $key_Number < $item_count; $key_Number++){print "<li>" . $items[$key_Number] . "</li>"; }

с

for ($key_Number = 0; $key_Number < $item_count && $key_number + $pas_number * $item_count < $array_count; $key_Number++){print "<li>" . $items[$key_Number + $pas_number * $item_count] . "</li>"; }

В настоящее время вы получаете одинаковые результаты на каждой итерации внешнего цикла, потому что ваш внутренний цикл не зависит от итерации внешнего цикла.

person penartur    schedule 15.08.2012
comment
хммм... это изменение привело к исчезновению всех внутренних элементов - person David Ramirez; 15.08.2012
comment
@DavidRamirez Я исправил опечатку. - person penartur; 15.08.2012