• 技术文章 >后端开发 >PHP问题

    php 如何实现两张不同的表分页

    藏色散人藏色散人2021-11-19 09:05:19原创271

    php实现两张不同表分页的方法:1、创建一个PHP示例文件;2、通过“function getPage($a, $b, $page, $page_size){...}”实现跨表分页即可。

    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑

    php 如何实现两张不同的表分页?

    PHP 跨表分页

    当两表数据相对均衡的情况下比较适用

    <?php
    function getPage($a, $b, $page, $page_size){
        sort($a);
        sort($b);
        $total_a = count($a);
        $total_b = count($b);
        $averge = floor($page*$page_size/2);
        $a_f = array_slice($a, $averge, $page_size); # 升序序列 first
        $b_f = array_slice($b, $averge, $page_size); # 升序序列
        $a_f_len = count($a_f);
        $b_f_len = count($b_f);
        $min_a = $a_f[0] ?? null;
        $min_b = $b_f[0] ?? null;
        $max_a = $a_f[$a_f_len-1] ?? null;
        $max_b = $b_f[$b_f_len-1] ?? null;
    
        if (empty($a_f)) {
            $min = $min_b;
            $a_s = getRangeInfo($a, $min_b, $max_a);
            $offset = count($a_s)+ ($averge-$total_a);
        }
    
        if (empty($b_f)) {
            $min = $min_a;
            $b_s = getRangeInfo($a, $min_a, $max_b);
            $offset = count($b_s)+ ($averge-$total_b);
        }
    
        if (!empty($a_f) && !empty($b_f)) {
            $min = min([$min_a, $min_b]);
            if($min_a > $min_b || empty($b_f)) # b组数据小  重新查询a组
            {
                # 查出偏移量
                # 第二次查询 second
                $a_s = getRangeInfo($a, $min, $max_a); # second 第二次查找
                # 求出新查出的数据与最开始查出a数组相差个数
                $offset = count($a_s)-$a_f_len;
            } else { # a组数据小  重新查询b组
                # 查出偏移量
                $b_s = getRangeInfo($b, $min, $max_b);
                # 求出新查出的数据与最开始查出a数组相差个数
                $offset = count($b_s)-$b_f_len;
            }
        }
        $now_position = $show = (int)($averge*2-$offset);
        $start_position = $page*$page_size;
        $end_position = ($page+1)*$page_size-1;
        // 假如一次查询某数组为空,查询的第二组数据未能涵盖所需全部数据,故重新查询
        $a_s = getlimit($a, $min, $start_position-$now_position+$page_size);
        $b_s = getlimit($b, $min, $start_position-$now_position+$page_size);
        $total_arr = array_merge($a_s, $b_s) ;
        sort( $total_arr); # 升序排列
    
        $res = [];
        foreach ($total_arr as $k=>$v) {
            if ($now_position > $end_position) {
                break;
            }
            if ($now_position < $start_position){
                $now_position = $now_position+1;
                continue;
            }
            $now_position = $now_position+1;
            $res[] = $v;
        }
    	// 思路如下:
        $min_str = $min_a > $min_b ? ' 最小数在b, 重新获取a数据'.json_encode($a_s):'最小数在a, 重新获取b数据'.json_encode($b_s);
    
        print_r('数组$a:'.json_encode($a));
        echo '<br>';
        print_r('数组$b:'.json_encode($b));
        echo '<br>';
        print_r('平均数floor is '.$averge.', $a 最小值是 '.$min_a.',$b 最小值是 '.$min_b.', 对比之后得出最小值是'.$min.','.$min_str.
            '此时偏移量'.$offset.', 最小数'.$min.'处于位置'.$show.', 我需要'.$start_position.'到'.$end_position.'的数据, 
        查出所需数据为'.json_encode($total_arr).', 结果为'.json_encode($res));
        return $res;}// 按值范围获取function getRangeInfo ($array, $start_value, $end_value){
        sort($array);
        $res = [];
        foreach ($array as $k => $v)
        {
            if ($v >= $start_value && $v <= $end_value){
                $res[] = $v;
            }
        }
        return $res;}// 按起始位置个数获取function getlimit ($array, $start_value, $num){
        sort($array);
        $res = [];
        foreach ($array as $k => $v)
        {
            if ($num<=0) {
                break;
            }
            if ($v >= $start_value){
                $res[] = $v;
                $num --;
            }
        }
        return $res;}$b = [1];$a = [2,3,1,4,5,6,7,8,9,10,12,14];$page = 2; # 第一页$page_size = 5;$list = getPage($a, $b, $page, $page_size);$all = array_merge($a, $b);sort($all);echo '<br>';echo '<br>';echo '<br>';$start_position = $page*$page_size;$real = array_slice($all, $start_position, $page_size);print_r('合并总数据'.json_encode($all).',一页'.$page_size.'条, 第'.(string)($page+1).'页数据为:'.json_encode($real));

    在这里插入图片描述

    推荐学习:《PHP视频教程

    以上就是php 如何实现两张不同的表分页的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 跨表分页
    上一篇:php怎么实现分页接口 下一篇:centos7怎么搭建php5.6
    千万级数据并发解决方案

    相关文章推荐

    • php 数组分页的实现方法• php分页有几种实现方法• php 分页查询怎么写• php怎么实现分页接口
    1/1

    PHP中文网