## The operating environment of this article: Windows 7 system, PHP version 7.1 , DELL G3 computerphp method to implement paging of two different tables: 1. Create a PHP sample file; 2. Implement it through "function getPage($a, $b, $page, $page_size){...}" Just paginate across tables.
#php How to realize paging of two different tables?
PHP cross-table pagingIt is more suitable when the data in the two tables is relatively balanced<?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 Video Tutorial"
The above is the detailed content of How to implement pagination between two different tables in php. For more information, please follow other related articles on the PHP Chinese website!