原生php制作分页函数

话不多说,直接上代码:

创建page.php文件,保存分页代码

<?php
//分页
/*
 调用:page(数据总条数,每页显示的数据条数数,要展示的页码按钮数,分页参数名)
 返回:array('limit','html')
 $count		数据总条数
 $num		每页显示的数据条数数
 $page		分页参数名
 $btn_num	要展示的页码按钮数
 */
function page($count,$num,$btn_num=10,$page='page'){
	if($count==0){//如果没有数据
		$data=array(
			'limit'=>'',
			'html'=>''
		);
		return $data;
	}
	if(!isset($_GET[$page])||!is_numeric($_GET[$page])||$_GET[$page]<1){
		$_GET[$page]=1;
	}
	//总页数
	$pager_num=ceil($count/$num);//向上取整
	if($_GET[$page]>$pager_num){
		$_GET[$page]=$pager_num;
	}
	//每页开始数据条数
	$start=($_GET[$page]-1)*$num;
	//sql语句中 ,limit 0,3	表示从第0条数据开始取3条数据
	$limit="limit {$start},{$num}";
	//获取url
	$current_url=$_SERVER['REQUEST_URI'];//获取当前的url,包括?及后面内容
	$arr_current=parse_url($current_url);//将当前url解析拆分到数组里,及把问号前面分成1部分,把问号及问号后面分成1部分
	$current_path=$arr_current['path'];//不包括?及后面内容的url
	$url='';
	if(isset($arr_current['query'])){
		parse_str($arr_current['query'],$arry_query);//?及后面的内容
		unset($arry_query[$page]);//去除page
		if(empty($arr_current)){
			$url="{$current_path}?{$page}=";
		}else{
			$other=http_build_query($arry_query);
			$url="{$current_path}?{$other}&{$page}=";
		}
	}else{
		$url="{$current_path}?{$page}=";
	}
	$html=array(); //
	if($btn_num>=$pager_num){//按钮数大于等于总页数
		//把所有按钮全部显示
		for($i=1;$i<=$pager_num;$i++){
			if($i==$_GET[$page]){//设定当前页不可点
				$html[$i]="<a>{$i}</a> ";
			}else{
				$html[$i]="<a href='{$url}{$i}'>{$i}</a> ";
			}
		}
	}else{//按钮数小于总页数
		$left_num=floor(($btn_num-1)/2);//当前页左边按钮数
		$start_page=$_GET[$page]-$left_num;//最左边的起始页码号
		$end_page=$start_page+$btn_num-1;//末尾页码号
		if($start_page<1){
			$start_page=1;
		}
		if($end_page>$pager_num){
			$start_page=$pager_num-($btn_num-1);
		}
		for($i=0;$i<$btn_num;$i++){
			if($start_page==$_GET[$page]){//设定当前页不可点
				$html[$start_page]="<a>{$start_page}</a> ";
			}else{
				$html[$start_page]="<a href='{$url}{$start_page}'>{$start_page}</a> ";
			}
			$start_page++;
		}
	}
	if($_GET[$page]!=1){
		$prev=$_GET[$page]-1;
		array_unshift($html,"<a href='{$url}{$prev}'>上一页</a>");
	}
	if($_GET[$page]!=$pager_num){
		$next=$_GET[$page]+1;
		array_push($html,"<a href='{$url}{$next}'>下一页</a>");
	}
	$html=implode(' ',$html);
	$data=array(
		'limit'=>$limit,
		'html'=>$html
	);
	return $data;
}
?>

调用

include_once "page.php";	//导入文件
$page=page(100,10);			//假设有100条数据,每页显示10条
echo $page['html'];			//输出分页html样式
//输出数据
$mydb=mysqli_connect($host,$user,$password,$db,$port);
$sql="select * from table {$page['limit']}";
$result=mysqli_query($mydb,$sql);
while($data=mysqli_fetch_assoc($result)){
	var_dump($data);
}

讲道理,分页这一块感觉还是挺难的,逻辑思维要求挺高,我跟着做了一遍也就懂个七八,如果你跟我一样,那就收藏代码,以后慢慢理解吧

如果您觉得本篇内容不错,可以点个关注,给个赞

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__0809 返回首页