Paginate阵列的组合不会提前产生整个组合

时间:2014-10-19 02:19:05

标签: php arrays pagination

我有以下循环,它结合了两个数组并在有序列表中显示结果:

$list1 = array("make","break","buy");
$list2 = array("home","car","bike");

echo "<ol>";
for($a=0; $a<3; $a++){
    for($b=0; $b<3; $b++){
        echo "<li".($list1[$a].$list2[$b])."</li>";
    }
}
echo "</ol>";

我拥有的实际数组每个包含大约1500个单词,因此列表长度超过2百万个。

有没有办法用分页显示结果,而不事先生成整个结果集? 例如,每页500个项目?

仅供参考,我不一定需要在有序列表中显示结果,如果这会弄乱分页。

1 个答案:

答案 0 :(得分:1)

首先,您需要能够从数组中的任意位置开始循环
当然你可以使用for循环,但我认为while循环在这里更合适。

$length1 = count($list1);
$length2 = count($list2);

//now indexes are initialized to variable values
$a = $var1; //start position $var1 is an integer variable between 0 and ($length1 - 1)
$b = $var2; //start position $var2 is an integer variable between 0 and ($length2 - 1)

while ($a < $length1) {
    while ($b < $length2) {
        echo '<li>', $list1[$a], ' ', $list2[$b], '</li>';
        $b++;
    }
    $b = 0; //reset inner loop each time it ends
    $a++;
}

接下来,如果在组合结束之前达到每页的最大结果数($limit),我们需要一种方法停止两个循环

$length1 = count($list1);
$length2 = count($list2);
$a = $var1;
$b = $var2;

$counter = 0;

while ($a < $length1) {
    while ($b < $length2) {
        echo '<li>', $list1[$a], ' ', $list2[$b], '</li>';

        $counter++;
        if($counter === $limit) break 2;

        $b++;
    }
    $b = 0;
    $a++;
}

最后,我们必须根据当前$var1(从第1页开始)和$var2找到上面$page$limit的正确值。这是普通的算术,我在这里不会解释 把它们放在一起:

$length1 = count($list1);
$length2 = count($list2);

$offset = $limit * ($page - 1);
$a = (int)($offset / $length2);
$b = $offset % $length2;

$counter = 0;
while ($a < $length1) {
    while ($b < $length2) {
        echo '<li>', $list1[$a], ' ', $list2[$b], '</li>';
        $counter++;
        if($counter === $limit) break 2;
        $b++;
    }
    $b = 0;
    $a++;
}