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

时间:2014-05-28 10:35:19

标签: php mysql json pagination

我没有从PHP直接访问数据库。如果是这样,我本可以简单地做分页。在这里,我向PHP Web服务发送GET请求,并将数据库的结果作为JSON提取。我有一个表,我想将数据库值显示在其中。由于数据库表包含1000多条记录,我想显示分页数据。

$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中。

如何使用PHP?

对JSON数组进行分页

我的JSON数据是这样的:

{
    "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表格

 <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>

4 个答案:

答案 0 :(得分:11)

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

$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>

Just a sample

答案 1 :(得分:2)

这是一个基于您的示例的工作代码

<?php
$json = '{
    "qqq": [
        {
            "a": "Conne",
            "b": "1",
            "c": "2014-05-19T15:40:06+05:30",
            "d": {
                "d1": "dani",
                "d2": {
                    "d2a": "1",
                    "d2b": "inmin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "1",
                "d4": "web",
                "d5": "8e11e4f63",
                "d6": "admin"
            },
            "e": "145"
        },
        {
            "a": "igroup",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup2",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup3",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup4",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup5",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup6",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup7",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup8",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        },
        {
            "a": "igroup9",
            "b": "1235",
            "c": "2014-05-27T11:23:11+05:30",
            "d": {
                "d1": "sev",
                "d2": {
                    "d2a": "1",
                    "d2b": "admin",
                    "d2c": "1",
                    "d2d": "1",
                    "d2e": "1",
                    "d2f": "1"

                },
                "d3": "7",
                "d4": "c",
                "d5": "changed",
                "d6": "eev"
            },
            "e": "132"
        }
    ]
}';
echo '<pre>';
$jsonarray = json_decode($json,true);
$page = !isset($_GET['page']) ? 1 : $_GET['page'];
$limit = 5; 
$offset = ($page - 1) * $limit;
$total_items = count($jsonarray['qqq']); 
$total_pages = ceil($total_items / $limit);
$array = array_splice($jsonarray['qqq'], $offset, $limit);

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

<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<5; $i++)
        {
            $a= $array[$i]['a'];
            $b= $array[$i]['d']['d1'] ;
            $c= $array[$i]['d']['d2']['d2a'] ;
            $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>

答案 2 :(得分:1)

我很乐意给你一个小例子,希望能帮到你:

jQuery的:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        //init pagenation
             var page =  $("#page option:selected").val();
             $.each($("tr"), function(key, value) {
                    if($(this).attr("id") != page){
                        $(this).css("display", "none");
                    }else{
                        $(this).css("display", "block");
                    }
                });

        //do pagenation          
            $("#page").change(function(){
                 var page =  $("#page option:selected").val();
                 $.each($("tr"), function(key, value) {
                        if($(this).attr("id") != page){
                            $(this).css("display", "none");
                        }else{
                            $(this).css("display", "block");
                        }
                    }); 
            });
         });                
</script>

HTML + PHP:

<?php
    $myArr = array('employee-1', 'employee-2', 'employee-3', 'employee-4', 'employee-5');
    $perPage = 2;//The number of items per page
    $output = '<table>';
    $counter = 0;
    $option = 1;// page ids
    foreach($myArr as $name){
        $output .= "<tr id='$option'><td>$name</td></tr>";
        $counter++;
        if($counter == $perPage) {$option++; $counter = 0;}
    }
    $output .= '</table>';
    $output .= "<select id='page'>";
    for($i=1; $i <= $option; $i++){
        $output .= "<option value='$i'>$i</option>";
    }
    echo $output; 
?>

但是对于你的代码:

jQuery的:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
    $(function(){
        //init pagenation
             var page =  $("#page option:selected").val();
             $.each($(".myTr"), function(key, value) {
                var idInLoop = $(this).attr("id");
                    if(idInLoop != page){
                        $(this).css("display", "none");
                    }else{
                        $(this).css("display", "block");
                    }
                });

        //do pagenation          
            $("#page").change(function(){
                 var page =  $("#page option:selected").val();
                 $.each($(".myTr"), function(key, value) {
                    var idInLoop = $(this).attr("id");
                        if(idInLoop != page){
                            $(this).css("display", "none");
                        }else{
                            $(this).css("display", "block");
                        }
                    });
            });
         });                
</script>

PHP + HTML:

<?php
    $output = ' <table id="show" >
                    <thead >
                    <tr id = "header">
                        <th>1stheader</th>
                        <th>2stheader</th>
                        <th>3stheader</th>
                        <th>4stheader</th>
                        <th>5stheader</th>
                    </tr>
                    </thead>
                    <tbody>';
    $perPage = 2;//The number of items per page
    $counter = 0;
    $option = 1;// page ids

    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'];

        $output .= "<tr class='myTr' id='$option' >";
            $output .= "<td>$a</td>";
            $output .= "<td>$b</td>";
            $output .= "<td>$c</td>";
            $output .= "<td>$d</td>";
            $output .= "<td>$e</td>";
        $output .= "</tr>";

        $counter++;
        if($counter == $perPage) {$option++; $counter = 0;}
    }
    $output .= "</tbody></table>";  

    $output .= "<select id='page'>";
    for($i=1; $i <= $option; $i++){
        $output .= "<option value='$i'>$i</option>";
    }
    echo $output;    
?>

答案 3 :(得分:0)

你有几种选择,我建议的最好的两种选择如下:

PHP解决方案:

使用会话,(在每个需要访问会话变量的php文件之前放置session_start();,还添加一个脚本以使会话超时)

如果未设置会话变量,则将DB输出存储到会话变量。

if (!isset($_SESSION['tabledata'])) {
    $json_data_fromdb= httpGet($ur3l."fromtable?u=".$var1."&ip=".$var2);
    $array = json_decode($json_data_fromdb, true);
    $_SESSION['count']=count($array['qqq']);
    $_SESSION['tabledata'] = $array['qqq'];
}

然后,您可以通过发送对特定值范围的请求来简单地对数据进行分页。

或者,您可以使用Datatables之类的JavaScript解决方案 并加载所有信息并让数据表过滤它,或让数据表直接与其他PHP服务器通信。