PHP - отображать элементы «X» из цикла foreach со ссылкой для отображения следующих элементов «X» - PullRequest
2 голосов
/ 15 июля 2010

У меня есть цикл 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;
}

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

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

Ответы [ 5 ]

5 голосов
/ 15 июля 2010

Это называется нумерацией страниц. Вы можете извлечь нужный вам сегмент массива с помощью 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

3 голосов
/ 15 июля 2010

Ну, вы можете использовать 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>';
}
1 голос
/ 15 июля 2010

Вы должны использовать обычный цикл for

if(count($nodes) < 10) {
   $nnodes = count($nodes);
} else {
   $nnodes = 10;
}

for($i = 0; $i < $nnodes; $i++) {
   echo $nodes[$i];
}
0 голосов
/ 21 марта 2013
if ($n++ <= 9) {
echo 'what ever you like to get going';
}
0 голосов
/ 06 сентября 2012

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

<?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; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...