>백엔드 개발 >PHP 문제 >PHP에서 서로 다른 두 테이블 사이에 페이지 매김을 구현하는 방법

PHP에서 서로 다른 두 테이블 사이에 페이지 매김을 구현하는 방법

藏色散人
藏色散人원래의
2021-11-19 09:04:442223검색

PHP에서 서로 다른 두 테이블의 페이징을 구현하는 방법: 1. PHP 샘플 파일을 생성합니다. 2. "function getPage($a, $b, $page, $page_size){...}를 통해 교차 테이블 페이징을 구현합니다. " 할 수 있다.

PHP에서 서로 다른 두 테이블 사이에 페이지 매김을 구현하는 방법

이 기사의 운영 환경: Windows 7 시스템, PHP 버전 7.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 ? &#39; 最小数在b, 重新获取a数据&#39;.json_encode($a_s):&#39;最小数在a, 重新获取b数据&#39;.json_encode($b_s);

    print_r(&#39;数组$a:&#39;.json_encode($a));
    echo &#39;<br>&#39;;
    print_r(&#39;数组$b:&#39;.json_encode($b));
    echo &#39;<br>&#39;;
    print_r(&#39;平均数floor is &#39;.$averge.&#39;, $a 最小值是 &#39;.$min_a.&#39;,$b 最小值是 &#39;.$min_b.&#39;, 对比之后得出最小值是&#39;.$min.&#39;,&#39;.$min_str.
        &#39;此时偏移量&#39;.$offset.&#39;, 最小数&#39;.$min.&#39;处于位置&#39;.$show.&#39;, 我需要&#39;.$start_position.&#39;到&#39;.$end_position.&#39;的数据, 
    查出所需数据为&#39;.json_encode($total_arr).&#39;, 结果为&#39;.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 &#39;<br>&#39;;echo &#39;<br>&#39;;echo &#39;<br>&#39;;$start_position = $page*$page_size;$real = array_slice($all, $start_position, $page_size);print_r(&#39;合并总数据&#39;.json_encode($all).&#39;,一页&#39;.$page_size.&#39;条, 第&#39;.(string)($page+1).&#39;页数据为:&#39;.json_encode($real));

PHP에서 서로 다른 두 테이블 사이에 페이지 매김을 구현하는 방법

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP에서 서로 다른 두 테이블 사이에 페이지 매김을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.