V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xiamuguizhi
V2EX  ›  问与答

[ PHP ] foreach 遍历后的数组如何分页!

  •  
  •   xiamuguizhi · 2018-02-20 09:45:56 +08:00 · 2810 次点击
    这是一个创建于 2472 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前的代码:

    			<?php foreach ($data as $id => $v) {
    				$tpl = ' <li> <h3>%s</h3> <h2><a href="%d.html" target="_blank">%s</a></h2></li> ';
    				echo sprintf($tpl, $v['date'], $id, $v['title']);
    			} ?>	
    

    图片描述

    要求能遍历后 每次显示 10 页 分页 输出

    我目前是用 js 分页,效果不是很好希望能 foreach 遍历后数组分页!

    希望效果如下:

    图片描述

    9 条回复    2018-03-01 23:05:10 +08:00
    qiayue
        1
    qiayue  
       2018-02-20 09:51:20 +08:00   ❤️ 1
    不要一次把数据全部取出来,每页想显示多少条就取多少条,第几页就偏移多少
    zyqf
        2
    zyqf  
       2018-02-20 10:26:46 +08:00 via Android
    Mysql limit offset
    zyqf
        3
    zyqf  
       2018-02-20 10:28:30 +08:00 via Android   ❤️ 1
    对不起,没审题,自己在 PHP 里写个偏移方法
    liuhaotian
        4
    liuhaotian  
       2018-02-20 11:01:07 +08:00   ❤️ 1
    phpok
        5
    phpok  
       2018-02-20 11:05:14 +08:00   ❤️ 1
    数据都出来了,将一维数组割成多个数组,用 array_chunk,然后下标从 0 开始表示第一页就是了~
    xiamuguizhi
        6
    xiamuguizhi  
    OP
       2018-02-20 11:10:52 +08:00
    @phpok 能写下代码? php 新手 纠结中!!!!
    des
        7
    des  
       2018-02-20 11:49:16 +08:00 via Android   ❤️ 1
    @phpok 取下标的话,刚好添加了数据就会分页有重复的

    如果数据一直不多的话,可以直接输出,然后前端分页。
    不过鉴于你的水平,建议先看完 PHP 文档的数组操作部分再写这个
    phpok
        8
    phpok  
       2018-03-01 23:03:34 +08:00
    @xiamuguizhi

    代码如下:
    ``` php
    $list = array(1,2,3,4,5,6,7,8,9);
    $mlist = array_chunk($list,4);
    //看分出了多少
    echo "<pre>".print_r($mlist,true)."</pre>";

    //计算共有几页
    $totalpage = count($mlist);
    $nowpage = isset($_GET['pageid']) ? intval($_GET['pageid']) : 1;
    if(!$nowpage){
    $nowpage = 1;
    }

    $position = $nowpage - 1;

    $prevpage = $nowpage > 1 ? "?pageid=".($nowpage-1) : '?pageid=1';
    $nextpage = ($nowpage + 1) > $totalpage ? '?pageid='.$totalpage : '?pageid='.($nowpage + 1);

    $list = $mlist[$position];

    echo "<pre>".print_r($list,true)."</pre>";
    echo 'Toal: '.$totalpage;
    echo ' <a href="'.$prevpage.'">Prev</a> ';
    echo ' <a href="'.$nextpage.'">Next</a> ';
    ```
    phpok
        9
    phpok  
       2018-03-01 23:05:10 +08:00
    @des 没那么仔细去考虑过

    不过说实话,数据全部读出来的确不是个好的做法,建议有多少取多少
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1120 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:08 · PVG 03:08 · LAX 11:08 · JFK 14:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.