文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2014-11-16 21:16

关注

本文操作环境: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));

在这里插入图片描述

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯