如何在 PHP 中对 JSON 数据进行分页?

2022-01-04 00:00:00 json php mysql pagination

我无法从 PHP 直接访问数据库.如果是这样,我可以简单地进行分页.在这里,我向 PHP Web 服务发送了一个 GET 请求,然后从数据库中获取结果为 JSON.我有一个表,我想在其中显示数据库值.由于数据库表包含1000多条记录,我想显示数据分页.

I don't have direct access to database from PHP. if it was so, I could have done pagination simply. Here I send a GET request to a PHP web service, and the result from the database is fetched as JSON. And I have a table and I want to show the database values into it. Since database table contains more than 1000 records, I want to show the data paginated.

$json_data_fromdb= httpGet($ur3l."fromtable?u=".$var1."&ip=".$var2);
$array = json_decode($json_data_fromdb, true);
$x=count($array['qqq']);
$array = $array['qqq'];

上面给出的是GET请求,对应的JSON存储在$array中.

The above given is the GET request and the corresponding JSON is stored in $array.

如何使用 PHP 对 JSON 数组进行分页?

How can I do pagination to a JSON array using PHP??

我的JSON数据是这样的:

My JSON data is like this:

{
    "qqq": [
        {
            "a": "Conne",
            "b": "1",
            "c": "2014-05-19T15:40:06+05:30",
            "d": {
                "d1": "dani",

                "d6": "admin"
            }

        },
        {
            "a": "igroup'",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",

                "d6": "eev"
            }

        }
    ]
}

下面给出的是我的 HTML 表格

And below given is my HTML table

 <table id="show" >
        <thead >
        <tr >
            <th>1stheader</th>
            <th>2stheader</th>
            <th>3stheader</th>
            <th>4stheader</th>
            <th>5stheader</th>
        </tr>
        </thead>
        <tbody>
        <?php
        for($i=0; $i<$x; $i++)
        {
            $a= $array[$i]['a'];
            $b= $array[$i]['d']['d1'] ;
            $c= $array[$i]['d']['d2'] ;
            $d= $array[$i]['b'];
            $e= $array[$i]['c'];

            ?>
            <tr >
                <td><?php echo $a; ?></td>
                <td><?php echo $b  ?></td>
                <td><?php echo c;   ?></td>
                <td><?php echo d;   ?></td>
                <td><?php echo $e;  ?></td>
            </tr>
        <?php }  ?>
        </tbody>
    </table>

推荐答案

如果你真的只想用 PHP 来做,你可以自己动手.但我强烈建议使用 jquery 插件进行分页以使其更容易.话虽如此,如果你想自己卷起来,你可以做这样的事情(有点乱,但像这样.)考虑这个例子:

If you want to really just do it in PHP you can just roll up your own. But I strongly suggest using jquery plugins to do the pagination to make it easier. That being said, if you want to roll up your own you could do something like this (lil bit messy but something like this.) Consider this example:

$sample_data = '{ "qqq": [ { "a": "Conne", "b": "1", "c": "2014-05-19T15:40:06+05:30", "d": { "d1": "dani", "d6": "admin" } }, { "a": "test1", "b": "1235", "c": "2014-    05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } }, { "a": "test2", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } }, { "a": "test3", "b":     "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } }, { "a": "test4", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } }, { "a":     "test5", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } }, { "a": "test6", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev"     } }, { "a": "test7", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } }, { "a": "test8", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev",     "d6": "eev" } }, { "a": "test9", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } }, { "a": "test10", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": {     "d1": "sev", "d6": "eev" } }, { "a": "test11", "b": "1235", "c": "2014-05-27T11:23:11+05:30", "d": { "d1": "sev", "d6": "eev" } } ]}';

// just normal getting data
$raw_data = json_decode($sample_data, true);
$raw_data = $raw_data['qqq'];

// use get variable to paging number
$page = !isset($_GET['page']) ? 1 : $_GET['page'];
$limit = 5; // five rows per page
$offset = ($page - 1) * $limit; // offset
$total_items = count($raw_data); // total items
$total_pages = ceil($total_items / $limit);
$final = array_splice($raw_data, $offset, $limit); // splice them according to offset and limit

?>
<!-- print links -->
<?php for($x = 1; $x <= $total_pages; $x++): ?>
    <a href='index.php?page=<?php echo $x; ?>'><?php echo $x; ?></a>
<?php endfor; ?>
<table border="1" cellpadding="10">
    <tr><th>Column 1</th><th>Column 2</th><th>Time</th><th>Column 4</th></tr>
    <?php foreach($final as $key => $value): ?>
        <tr>
        <?php foreach($value as $index => $element): ?>
            <td><?php echo !is_array($element) ? $element : implode(',', $element); ?></td>
        <?php endforeach; ?>
        </tr>
    <?php endforeach; ?>
</table>

只是一个例子

相关文章