foreach数组结果分页

时间:2013-12-21 12:48:35

标签: php arrays pagination

使代码低于27k ID,因此我希望将结果分页为每页100个IDS结果。

function subtree($id, $parents)
{
    echo ' <tr><td> <b>Client No.:</b> </td><td> ';
    echo $id;
    echo ' </td></tr> ';
    if (isset($parents[$id])) {
        foreach ($parents[$id] as $child) {
            subtree($child, $parents);
        }
    }
} 

$ parents是主sql查询中的一个数组:

$ id是父ID

当我调用该函数时,结果全部在同一页面中,我现在要做的是将这些结果分页到每页100个。

2 个答案:

答案 0 :(得分:0)

试试这个

$count = 0;
function subtree($id, $parents)
{
    echo ' <tr><td> <b>Client No.:</b> </td><td> ';
    echo $id;
    echo ' </td></tr> ';
    if (isset($parents[$id]))
        foreach ($parents[$id] as $child) {
            if ($count === 100) {
                break;
            }
            subtree($child, $parents);
            $count++;
        }
}

这将有助于您在每页显示100个结果。现在,您可以创建链接以显示下一页中的下100条记录

答案 1 :(得分:0)

改进您的数据库例程。在尝试对多维数据进行分页之前,您可能希望使用临时表来帮助展平和规范化多维数据。您需要跟踪您所在的页面以及每个页面的大小,

如果您使用的是mysql,请使用自动生成的ID列来指定您的开始位置AND id > 300,然后添加LIMIT 100以说明您的结束位置。 在oracle上它将是AND RowNum between 300 and 400

您的另一个选择是使用递归函数构建一个id的平面列表并将其存储在会话中,然后运行您的分页例程。

你的另一个选择是将重写重写成一个堆栈和循环结构,这样你就可以知道在经历它的过程中你走了多远,指定了这个页面的起点,直到它为止。你点击开始计数器,发出数据直到你点击结束标记,然后返回。

当然,最糟糕的选择是简单地使用全局变量来指示您尝试打印多少内容并在if ($count >= $start && $count <= $end)语句周围添加echo。不要那样做。但这样做很简单,而且可能在不考虑它的情况下工作并且非常低效。