PHP – exiba itens ‘X’ do loop foreach com link para exibir os itens ‘X’ seguintes

Eu tenho um loop foreach que percorre uma matriz (nós simplesXML). Esta matriz pode ter entre 0 e várias centenas de itens nele. Gostaria de encontrar uma maneira de exibir os primeiros 10 resultados e, em seguida, ter um link para exibir os próximos 10 e assim por diante.

Por exemplo, atualmente tenho:

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

obviamente, não importa quantos itens estão na matriz $ nodos, ele só exibe os 10 primeiros. Mas acho que leio que foreach loops restabeleça o contador toda vez que eles correm – então, se eu quisesse ter um link que dizia: next 10 itmes – Não tenho certeza de como eu diria ao loop para começar no índice = 10.

Estou até aborrecendo a tree certa aqui?

Isso é chamado de paginação. Você pode extrair o segmento da matriz que você precisa com 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."
\n"; }

Então você só precisa de um link que aponte para a mesma página com o argumento? Page = $ page + 1

Bem, você poderia usar um 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 'Next'; } 

Você deve usar um loop regular para

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

Eu tive o mesmo problema, resolvido dessa maneira

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