使用 php 对 foreach 循环的结果进行分页

Paginate result of foreach loop with php

提问人:Lori 提问时间:2/19/2019 最后编辑:Lori 更新时间:8/19/2022 访问量:617

问:

更新***我正在尝试对此 foreach 循环的结果进行分页。这几乎有效。我能够获得分页所需的所有信息,但所有结果都显示在每一页上。记录计数正确,生成的页码正确。我所缺少的只是向每页显示正确数量的记录。我知道我需要将“LIMIT”部分添加到sql中,但是在哪里?

更新#2 - LIMIT正在工作,但是,我发现显示的记录仅被视为1条记录,因为它们位于1个字段的列表中。因此,我需要以某种方式将结果分解成单独的部分,以便准确计数。我希望这是有道理的。

//$page is generated on another page and is working correctly

   $sql = mysqli_query($con, "SELECT * FROM profile_tbl WHERE X_reg_id = '$var_reg_id'");

    while($field = mysqli_fetch_assoc($sql)){
        $list = $field['profile_choose_them'];
        $list_count = preg_split("/((\r?\n)|(\r\n?))/", $list);
        $records_per_page = 3;  
        $item_count= count($list_count);
        $item_count_adj_total_records = ($row_count-1);
        $total_pages = ceil($item_count_adj_total_records/$records_per_page);
        $offset = (($page-1)*$records_per_page);

    }

        foreach(preg_split("/((\r?\n)|(\r\n?))/", $list) as $id){    

                   $single = mysqli_query($con, "SELECT * FROM profile_tbl WHERE X_reg_id = '$id'");

                        while($display = mysqli_fetch_assoc($single)){

                            echo '<div><img src="'.$display["profile_pic_main"] .'"></div>';       

                        }

        }

for($page=1;$page<=$total_pages;$page++){
    echo '<a href="../../'.$var_return_ref.'?page='.$page.'">'.$page.'</a> ';
}   

我试过了,但它不显示我的项目,只显示页码

$single = mysqli_query($con, "SELECT * FROM profile_tbl WHERE X_reg_id = '$id' LIMIT ($offset, $item_count_adj_total_records)");
php sql mysqli foreach 分页

评论

0赞 Dave S 2/19/2019
你已经搜索过 SO 寻找其他类似的问题了,对吧?您已经拒绝了哪些解决方案?请编辑您的问题以提供更多详细信息。
0赞 Lori 2/19/2019
是的,我已经搜索了 DAYS......很多很多小时尝试不同的“解决方案”,我什至不这样做就打开这个网站。我所有的尝试都失败了,否则我就不会在这里了。我认为我的问题是向前迈进的。我需要对该代码进行分页。就是这样。
1赞 Lelio Faieta 2/19/2019
您正在嵌套三个循环,一个嵌套在另一个循环中。这是完全不清楚的。你为什么需要这个?对于您需要执行的操作,您的代码看起来非常复杂
0赞 Lori 2/19/2019
对,我同意,我不知道如何清理它!

答:

0赞 Rarst 2/19/2019 #1

由于您专门询问循环,我猜这是您需要分页的部分。它似乎循环了多个 ID 集。foreach

在纯PHP级别上,将此类数组拆分为页面的最暴力方法是对其进行分块:

$ids_array = preg_split("/((\r?\n)|(\r\n?))/", $my_fields['profile_choose_them']);
$pages = array_chunk( $ids_array, 10 );

foreach( $pages[0] as $assign_id ) { // this would loop through first 10 items

}

$pages将包含拆分为 10 个元素的数组的原始数组。因此,每个条目都可以被视为单个页面的一组 ID。$pages

评论

0赞 Lori 2/19/2019
谢谢拉斯特。这看起来很有帮助,但我一直遇到的问题是在哪里或如何实现它。我是否用 $ids_array 变量替换 foreach(preg_split 部分?我不知道整段代码应该是什么样子。
0赞 Rarst 2/19/2019
好吧,我也不知道整段代码应该是什么样子。您的问题表明您已经有分页数组的经验,您可以在相同的代码库中查找现有方法并对此进行调整。
0赞 Lori 2/19/2019
我发布的代码就是它现在的样子。没有区别,所以我问如何把你的代码放到我的代码中。如果我能实现我的其他分页代码(正如我 5 天来一直在尝试的那样,我会这样做的。我做错了,所以我要求事情的正确顺序。
0赞 Rarst 2/19/2019
我已经编辑了一些如何调整。请注意,这不考虑处理不同页面的逻辑,因为您的代码没有任何与当前页面相关的输入。foreach