电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

PHP 實現(xiàn)數(shù)組分頁

瀏覽:9日期:2022-09-06 18:48:41
目錄array_slicearray_chunkLimitIterator參數(shù)錯誤時的表現(xiàn)總結(jié)

今天,我們就來學(xué)習(xí)一下可以實現(xiàn)這個能力的一些函數(shù)技巧。

首先,我們還是準備好測試數(shù)據(jù)。

$data = [ ’A’, ’B’, ’C’, ’D’, ’E’, ’F’, ’G’, ’H’, ’I’, ’J’, ’K’,];// $p = $_GET[’p’];$p = 2;$currentPage = $p <= 1 ? 0 : $p - 1;$pageSize = 3;$offset = $currentPage * $pageSize;

假設(shè) $data 就是從數(shù)據(jù)庫中取出的全部數(shù)據(jù),或者就是我們寫死在 PHP 代碼中的數(shù)據(jù)。然后我們設(shè)定 $p 為接收到的請求參數(shù),當前訪問的是第二頁。$currentPage 是用于查詢偏移量的修正,在代碼開發(fā)的世界中,下標索引都是從0開始的,所以我們需要對接收到的參數(shù)進行減一的操作。當然,你也可以設(shè)定前端傳遞的參數(shù)就是以 0 為第一頁的。這個就不多解釋了,相信大家只要正式的學(xué)習(xí)或者參與過開發(fā)項目都會明白它的意思。

然后我們定義了當前頁面所顯示的信息條數(shù) $pageSize ,也就是只獲取 3 條數(shù)據(jù)。最后,我們計算了一下偏移量,也就是類似于 MySQL 的 LIMIT 中的那個參數(shù)。它的作用就是告訴我們從第幾條開始查詢,然后配合 $pageSize 查詢幾條。這樣我們就可以獲得當前頁面對應(yīng)的數(shù)據(jù)了。(貌似把分頁的原理都講了一下)

array_slice

第一個也是最基礎(chǔ)和最常見的分頁方式,就是使用 array_slice() 函數(shù)來實現(xiàn)。它的作用是從數(shù)組中截取出一段內(nèi)容來并返回這段內(nèi)容的數(shù)組。

var_dump(array_slice($data, $offset, $pageSize));// array(3) {// [0]=>// string(1) 'D'// [1]=>// string(1) 'E'// [2]=>// string(1) 'F'// }

array_slice() 函數(shù)需要三個參數(shù),第二個參數(shù)就是偏移量,第三個參數(shù)是查詢幾條數(shù)據(jù)。其中,第三個參數(shù)是可選的,不填的話就會把當前設(shè)定的偏移量之后的數(shù)據(jù)全部顯示出來。是不是和我們的 MySQL 查詢語句一模一樣。沒錯,他們本身就是類似的操作。

array_chunk

array_chunk() 函數(shù)則是根據(jù)一個數(shù)值參數(shù)將一個數(shù)組進行分組,也就是將數(shù)組分割成一段一段的子數(shù)組。我們就可以根據(jù)分割后的數(shù)組來獲取指定下標的子數(shù)組內(nèi)容,這些內(nèi)容就是當前的頁面需要展示的數(shù)據(jù)了。

$pages = array_chunk($data, $pageSize);var_dump($pages);// array(4) {// [0]=>// array(3) {// [0]=>// string(1) 'A'// [1]=>// string(1) 'B'// [2]=>// string(1) 'C'// }// [1]=>// array(3) {// [0]=>// string(1) 'D'// [1]=>// string(1) 'E'// [2]=>// string(1) 'F'// }// [2]=>// array(3) {// [0]=>// string(1) 'G'// [1]=>// string(1) 'H'// [2]=>// string(1) 'I'// }// [3]=>// array(2) {// [0]=>// string(1) 'J'// [1]=>// string(1) 'K'// }// }var_dump($pages[$currentPage]);// array(3) {// [0]=>// string(1) 'A'// [1]=>// string(1) 'B'// [2]=>// string(1) 'C'// }

這段代碼我們輸出了分割后的數(shù)組內(nèi)容,然后需要的是第二頁也就是下標為 1 的數(shù)據(jù),直接通過分割后的數(shù)組就可以方便地獲取到所需要的內(nèi)容了。使用這個函數(shù)來做數(shù)組分頁的功能非常地簡單直觀,而且它不需要去計算偏移量,直接就是使用當前頁 $currentPage 和 $pageSize 就可以完成對于數(shù)據(jù)的分組了,非常推薦大家使用這個函數(shù)來進行類似的操作。

LimitIterator

最后我們要學(xué)習(xí)到的是使用一個迭代器類來實現(xiàn)數(shù)組分頁的能力,這個使用的就比較少了,估計都沒什么人知道,但其實 LimitIterator 類在 PHP5.1 時就已經(jīng)提供了。它的作用是允許遍歷一個 Iterator 的限定子集的元素。也就是說,如果我們的代碼中使用了迭代器模式,實現(xiàn)了迭代器接口,那么這些迭代器類都可以使用這個類進行分頁操作。

foreach (new LimitIterator(new ArrayIterator($data), $offset, $pageSize) as $d) { var_dump($d);}// string(1) 'D'// string(1) 'E'// string(1) 'F'

它需要的實例化構(gòu)造參數(shù)包含3個,第一個是一個迭代器對象,由于數(shù)組不是迭代器對象,所以我們使用 ArrayIterator 實例將我們的數(shù)組數(shù)據(jù)轉(zhuǎn)化為一個迭代器對象。后面兩個參數(shù)就是偏移量和數(shù)據(jù)數(shù)量了,這個和 array_slice() 函數(shù)是類似的,不過不同的是,它的偏移量參數(shù)也是可以選的。如果我們不給后面的可選參數(shù)的話,那么它將遍歷所有的數(shù)據(jù)。

foreach (new LimitIterator(new ArrayIterator($data)) as $d) { var_dump($d);}// string(1) 'A'// string(1) 'B'// string(1) 'C'// string(1) 'D'// string(1) 'E'// string(1) 'F'// string(1) 'G'// string(1) 'H'// string(1) 'I'// string(1) 'J'// string(1) 'K'參數(shù)錯誤時的表現(xiàn)

接下來,我們看看如果參數(shù)錯誤,也就是偏移量或者所需的數(shù)據(jù)量大小有問題的話,這些操作將會有什么樣的表現(xiàn)。

var_dump(array_slice($data, $offset, 150));// array(8) {// [0]=>// string(1) 'D'// [1]=>// string(1) 'E'// [2]=>// string(1) 'F'// [3]=>// string(1) 'G'// [4]=>// string(1) 'H'// [5]=>// string(1) 'I'// [6]=>// string(1) 'J'// [7]=>// string(1) 'K'// }var_dump(array_slice($data, 15, $pageSize));// array(0) {// }

array_slice() 函數(shù)對于偏移量錯誤的兼容就是展示一個空的數(shù)組。而數(shù)據(jù)量超標的話則會展示所有偏移量之后的數(shù)據(jù)。

var_dump($pages[15]);// NULL

array_chunk() 對于下標不存在的數(shù)據(jù)當然就是返回一個 NULL 值啦。

foreach (new LimitIterator(new ArrayIterator($data), $offset, 150) as $d) { var_dump($d);}// string(1) 'D'// string(1) 'E'// string(1) 'F'// string(1) 'G'// string(1) 'H'// string(1) 'I'// string(1) 'J'// string(1) 'K'foreach (new LimitIterator(new ArrayIterator($data), 15, $pageSize) as $d) { var_dump($d);}// Fatal error: Uncaught OutOfBoundsException: Seek position 15 is out of range

LimitIterator 則是對于偏移量錯誤的數(shù)據(jù)直接返回錯誤異常信息了。這也是類模式處理的好處,有錯誤都會以異常的形式進行返回,方便我們對異常進行后續(xù)的處理。

其它的測試大家還可以自行檢測,比如偏移是 0 或者是負數(shù)的情況,數(shù)據(jù)量是 0 或者是負數(shù)的情況。這些我就不多寫了,大家可以根據(jù)已有的知識先猜想一下結(jié)果會是什么樣的,然后再自己寫代碼驗證一下結(jié)果是符合自己的預(yù)期,這樣學(xué)習(xí)的效果會非常棒哦!(在下方測試代碼鏈接中有測試,結(jié)果里面是有坑的哦)

總結(jié)

一個功能使用了三種方式來實現(xiàn),這就是代碼的魅力。至于哪個好哪個壞我們不多做評價,一切都是以業(yè)務(wù)為核心來進行選取。類似的功能雖說并不常見,但很多項目里都會遇到,比如說后臺用戶組管理就會非常常見,一般來說后臺用戶分組如果不是特別大型的 ERP 項目都不會很多,但有時候也會達到需要分頁的程度,這時候,我們就可以考慮考慮使用今天所學(xué)的知識來做咯!

測試代碼

以上就是PHP 實現(xiàn)數(shù)組分頁的詳細內(nèi)容,更多關(guān)于PHP 數(shù)組分頁的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 半自动预灌装机,卡式瓶灌装机,注射器灌装机,给药器灌装机,大输液灌装机,西林瓶灌装机-长沙一星制药机械有限公司 | 洗地机_全自动洗地机_手推式洗地机【上海滢皓环保】 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 氢氧化钾厂家直销批发-济南金昊化工有限公司 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 超声波破碎仪-均质乳化机(供应杭州,上海,北京,广州,深圳,成都等地)-上海沪析实业有限公司 | 衬塑管道_衬四氟管道厂家-淄博恒固化工设备有限公司 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 亮化工程,亮化设计,城市亮化工程,亮化资质合作,长沙亮化照明,杰奥思【官网】 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 中国产业发展研究网 - 提供行业研究报告 可行性研究报告 投资咨询 市场调研服务 | 科客,主见不成见| 防爆电机-高压防爆电机-ybx4电动机厂家-河南省南洋防爆电机有限公司 | 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 | 辽宁资质代办_辽宁建筑资质办理_辽宁建筑资质延期升级_辽宁中杭资质代办 | 作文导航网_作文之家_满分作文_优秀作文_作文大全_作文素材_最新作文分享发布平台 | OpenI 启智 新一代人工智能开源开放平台| 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 博客-悦享汽车品质生活| 板式换热器_板式换热器价格_管式换热器厂家-青岛康景辉 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 广州番禺搬家公司_天河黄埔搬家公司_企业工厂搬迁_日式搬家_广州搬家公司_厚道搬迁搬家公司 | 德国进口电锅炉_商用电热水器_壁挂炉_电采暖器_电热锅炉[德国宝] | 冷油器-冷油器换管改造-连云港灵动列管式冷油器生产厂家 | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 全自动翻转振荡器-浸出式水平振荡器厂家-土壤干燥箱价格-常州普天仪器 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 |