我有以下循环,它结合了两个数组并在有序列表中显示结果:
$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个项目?
仅供参考,我不一定需要在有序列表中显示结果,如果这会弄乱分页。
答案 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++;
}