使用$ _GET进行PHP数组分页

时间:2015-11-11 08:21:48

标签: php pagination

我在这里有示例数组:http://pastebin.com/raw.php?i=rU287x69我希望它与2 result per page分页。

分页将基于url参数($_GET['page']

我的数组有7 objects。因此,max页面将为4,因为它会显示2 per page

我已经对它进行了编码,但即使页面数量不足,问题仍然存在。

实施例。 ?page=5仍有来自page 4

的结果
    $page_page = 2;
    $page = ! empty( $_GET['page'] ) ? (int) $_GET['page'] : 1;
    $total = count($apps);
    $totalPages = ceil( $total/ $page_page );
    $page = max($page, 1);
    $page = min($page, $totalPages);
    $offset = ($page - 1) * $page_page;
    if( $offset < 0 ) $offset = 0;

    $apps = array_slice( $apps, $offset, $page_page );
    print_r($apps);

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

你的逻辑错误。

        ...
        order: [[0, 'asc']],
        processing: true,
        serverSide: true,
        "fnInitComplete": function (oSettings, json) {
            adminRoles.fnFilterOnReturn();
        },
        ajax: ...

您的偏移量为6,因此返回记录号7。

如果删除这两行:

//For your example: ?page=5
$page_page = 2;    
$page = ! empty( $_GET['page'] ) ? (int) $_GET['page'] : 1;   // 5
$total = count($apps);                                        // 7
$totalPages = ceil( $total/ $page_page );                     // 4
$page = max($page, 1);                                        // 5 (correct)
$page = min($page, $totalPages);                              // 4 (incorrect)
$offset = ($page - 1) * $page_page;                           // 6 (incorrect)

其余的逻辑将起作用。

$page = max($page, 1);    
$page = min($page, $totalPages);

如果您需要此分页循环的值,请将其重命名或将其移至$ offset以下。