PHP – отображает элементы «X» из цикла foreach со ссылкой для отображения следующих элементов «X»

У меня есть цикл foreach, который проходит через массив (узлы simpleXML). Этот массив может иметь от 0 до нескольких сотен элементов. Я хотел бы найти способ отображать первые 10 результатов, а затем иметь ссылку для отображения следующих 10 и так далее.

например, в настоящее время я имею:

$i=0; $limit=10; foreach ($nodes as $node){ echo "here is the output: ".$node."<br>\n"; if (++$i >=$limit) break; } 

очевидно, независимо от того, сколько элементов находится в массиве $ nodes, оно отображает только первые 10. Но я думаю, что я читал, что петли foreach перезапускают счетчик каждый раз, когда они запускаются, поэтому, если бы я хотел иметь ссылку, которая говорила: next 10 itmes – Я не уверен, как бы я сказал, чтобы цикл начинался с index = 10.

Я даже лаяю верное дерево здесь?

Это называется разбиение на страницы. Вы можете извлечь сегмент массива, который вам нужен, с помощью array_slice: http://php.net/array_slice

 <?php $page = isset($_GET['page']) ? intval($_GET['page']) : 0; $elementsPerPage = 10; $elements = array_slice($nodes, $page * $elementsPerPage, $elementsPerPage); foreach($elements as $node) { echo "Here is the output: ".$node."<br>\n"; } 

Тогда вам нужна только ссылка, указывающая на одну страницу с аргументом? Page = $ page + 1

Ну, вы можете использовать LimitIterator …

 $offset = (int) (isset($_GET['offset']) ? $_GET['offset'] : 0); $limit = 10; $arrayIterator = new ArrayIterator($nodes); $limitIterator = new LimitIterator($arrayIterator, $offset, $limit); $n = 0; foreach ($limitIterator as $node) { $n++; //Display $node; } if ($n == 10) { echo '<a href="?offset='.($offset + 10).'">Next</a>'; } 

Вы должны использовать регулярный цикл

 if(count($nodes) < 10) { $nnodes = count($nodes); } else { $nnodes = 10; } for($i = 0; $i < $nnodes; $i++) { echo $nodes[$i]; } 

У меня была та же проблема, решена так

 <?php $i=0 ?> <?php foreach ($nodes as $node) : ?> <?php $i++ ?> <?php echo "here is the output: ".$node."<br>\n"; ?> <?php if ($i == 3) break; ?> <?php endforeach; ?> 
 if ($n++ <= 9) { echo 'what ever you like to get going'; }