日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

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

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

首先,我們還是準(zhǔn)備好測試數(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ù)。然后我們?cè)O(shè)定 $p 為接收到的請(qǐng)求參數(shù),當(dāng)前訪問的是第二頁。$currentPage 是用于查詢偏移量的修正,在代碼開發(fā)的世界中,下標(biāo)索引都是從0開始的,所以我們需要對(duì)接收到的參數(shù)進(jìn)行減一的操作。當(dāng)然,你也可以設(shè)定前端傳遞的參數(shù)就是以 0 為第一頁的。這個(gè)就不多解釋了,相信大家只要正式的學(xué)習(xí)或者參與過開發(fā)項(xiàng)目都會(huì)明白它的意思。

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

array_slice

第一個(gè)也是最基礎(chǔ)和最常見的分頁方式,就是使用 array_slice() 函數(shù)來實(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ù)需要三個(gè)參數(shù),第二個(gè)參數(shù)就是偏移量,第三個(gè)參數(shù)是查詢幾條數(shù)據(jù)。其中,第三個(gè)參數(shù)是可選的,不填的話就會(huì)把當(dāng)前設(shè)定的偏移量之后的數(shù)據(jù)全部顯示出來。是不是和我們的 MySQL 查詢語句一模一樣。沒錯(cuò),他們本身就是類似的操作。

array_chunk

array_chunk() 函數(shù)則是根據(jù)一個(gè)數(shù)值參數(shù)將一個(gè)數(shù)組進(jìn)行分組,也就是將數(shù)組分割成一段一段的子數(shù)組。我們就可以根據(jù)分割后的數(shù)組來獲取指定下標(biāo)的子數(shù)組內(nèi)容,這些內(nèi)容就是當(dāng)前的頁面需要展示的數(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)容,然后需要的是第二頁也就是下標(biāo)為 1 的數(shù)據(jù),直接通過分割后的數(shù)組就可以方便地獲取到所需要的內(nèi)容了。使用這個(gè)函數(shù)來做數(shù)組分頁的功能非常地簡單直觀,而且它不需要去計(jì)算偏移量,直接就是使用當(dāng)前頁 $currentPage 和 $pageSize 就可以完成對(duì)于數(shù)據(jù)的分組了,非常推薦大家使用這個(gè)函數(shù)來進(jìn)行類似的操作。

LimitIterator

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

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

它需要的實(shí)例化構(gòu)造參數(shù)包含3個(gè),第一個(gè)是一個(gè)迭代器對(duì)象,由于數(shù)組不是迭代器對(duì)象,所以我們使用 ArrayIterator 實(shí)例將我們的數(shù)組數(shù)據(jù)轉(zhuǎn)化為一個(gè)迭代器對(duì)象。后面兩個(gè)參數(shù)就是偏移量和數(shù)據(jù)數(shù)量了,這個(gè)和 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ù)錯(cuò)誤時(shí)的表現(xiàn)

接下來,我們看看如果參數(shù)錯(cuò)誤,也就是偏移量或者所需的數(shù)據(jù)量大小有問題的話,這些操作將會(huì)有什么樣的表現(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ù)對(duì)于偏移量錯(cuò)誤的兼容就是展示一個(gè)空的數(shù)組。而數(shù)據(jù)量超標(biāo)的話則會(huì)展示所有偏移量之后的數(shù)據(jù)。

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

array_chunk() 對(duì)于下標(biāo)不存在的數(shù)據(jù)當(dāng)然就是返回一個(gè) 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 則是對(duì)于偏移量錯(cuò)誤的數(shù)據(jù)直接返回錯(cuò)誤異常信息了。這也是類模式處理的好處,有錯(cuò)誤都會(huì)以異常的形式進(jìn)行返回,方便我們對(duì)異常進(jìn)行后續(xù)的處理。

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

總結(jié)

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

測試代碼

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

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
丝袜av一区| 欧美不卡高清一区二区三区| 国产精品久av福利在线观看| 欧美~级网站不卡| 国产精品chinese| 日韩精品福利一区二区三区| av不卡在线看| 欧美午夜不卡影院在线观看完整版免费| 久久久久久色 | 91青青国产在线观看精品| 欧美视频久久| 国产亚洲高清一区| 97久久亚洲| 国产精品jk白丝蜜臀av小说| 国产日产精品_国产精品毛片| 婷婷视频一区二区三区| 亚洲精品福利| 国产欧美日韩精品一区二区三区| 色狠狠一区二区三区| 日本在线观看不卡视频| 国产日韩高清一区二区三区在线| 日韩精品一二三| 四虎精品永久免费| 国产欧美欧美| 国产美女高潮在线观看| 久久久影院免费| 亚洲在线免费| 亚洲香蕉久久| 国产极品一区| 久久精品一区二区不卡| 蜜桃一区二区三区在线| 91精品国产自产精品男人的天堂| 欧美亚洲tv| 日韩欧美一区二区三区在线视频 | 99国内精品| 亚洲免费观看高清完整版在线观| 91嫩草精品| 欧美日韩在线播放视频| 日韩精品视频在线看| 国产精品国产三级国产在线观看| 亚洲午夜视频| 国产精品chinese| 在线视频免费在线观看一区二区| 911精品国产| 136国产福利精品导航网址| 日本不卡视频在线观看| 午夜av成人| 国产精品久久| 日韩精品亚洲专区在线观看| 久久久天天操| 久久精品免费看| 性一交一乱一区二区洋洋av| 国产一区二区三区网| 日韩视频一区| 久久精品影视| 欧美片第1页| 欧美aⅴ一区二区三区视频| 亚洲bt欧美bt精品777| 欧美粗暴jizz性欧美20| 日韩在线中文| 精品欧美视频| 亚洲欧美激情诱惑| 国产精品免费精品自在线观看| 91精品在线观看国产| 91欧美在线| 国产一区不卡| 日产精品一区二区| 国产精品99在线观看| 精品三级av在线导航| 樱桃视频成人在线观看| 欧美va亚洲va日韩∨a综合色| 丝袜美腿一区二区三区| 国产探花一区二区| 新版的欧美在线视频| 国产偷自视频区视频一区二区| 日韩精品免费视频人成| 97视频热人人精品免费| 激情久久一区二区| 午夜久久美女| 91亚洲无吗| 欧美中文一区二区| 久久精品超碰| 亚洲精品99| 欧美精品观看| 中文在线中文资源| 久久香蕉精品| 精品日本视频| 亚洲精品自拍| 国产亚洲一区二区手机在线观看| 国产偷自视频区视频一区二区| 国产精一区二区| 91成人精品| 国产日韩在线观看视频| 日韩精品诱惑一区?区三区| 日韩欧美四区| 久久99精品久久久久久园产越南| 精精国产xxxx视频在线野外| 日韩极品在线观看| 欧美一区二区三区激情视频| 国产极品嫩模在线观看91精品| 在线观看一区| 久久精品国产亚洲夜色av网站| 国产精品欧美大片| 日韩激情视频网站| 久热精品在线| 欧美在线影院| 国产成人精品亚洲日本在线观看| 中文字幕日韩高清在线| 婷婷综合在线| 久久国产亚洲精品| 韩国久久久久久| 成人午夜毛片| 精品国产鲁一鲁****| 久久av免费| 精品视频久久| 国产日韩一区二区三区在线| 日韩精品一卡二卡三卡四卡无卡| 亚洲少妇在线| 丝瓜av网站精品一区二区| 亚洲国产综合在线看不卡| 欧美freesex黑人又粗又大| 97精品国产福利一区二区三区| 婷婷五月色综合香五月| 日本亚洲视频| 日本成人中文字幕| 国产视频一区二区在线播放| 国产精品传媒麻豆hd| 国产欧美成人| 国精品产品一区| 日韩国产专区| 亚洲午夜视频| 日本亚洲视频| 精品免费av一区二区三区| 综合日韩av| 亚洲欧洲午夜| 亚洲欧美久久精品| 国产成人精品三级高清久久91| 国产精品免费不| 老牛影视精品| 国产亚洲毛片在线| 久久久精品午夜少妇| 国产精品女主播一区二区三区| 免费人成在线不卡| 国产精选久久| 亚洲调教视频在线观看| 日韩黄色在线观看| 久久久夜精品| 日本天堂一区| 欧美中文一区二区| 日本精品另类| 九九色在线视频| 日韩av网站在线观看| 国产精品网址| 欧美片第1页| 日韩av三区| 不卡在线一区| 久久精品国产亚洲aⅴ| 99亚洲精品| 四虎成人av| 国产探花一区二区| 欧美日韩四区| 伊伊综合在线| 精品国产aⅴ| 91精品啪在线观看国产爱臀| 亚洲二区精品| 精品三级av| 国产精品最新| 婷婷亚洲综合| 在线观看精品| 精品视频亚洲| 国产精品www.| 91精品国产自产观看在线| 制服诱惑一区二区| 99精品在线| 91偷拍一区二区三区精品| **爰片久久毛片| 亚洲2区在线| 亚洲开心激情| 日韩精品一区第一页| 99国产精品视频免费观看一公开| 中文字幕在线视频网站| 激情不卡一区二区三区视频在线| 亚洲精品动态| 日韩国产91| 免费在线亚洲| 精品国产精品国产偷麻豆| 免费在线亚洲| 91一区二区| 黑人精品一区| 欧美手机在线| 国产亚洲福利| 亚洲开心激情| 国产精品对白| 精品一区二区三区免费看| 美女高潮久久久| 国产一区丝袜| 亚洲天堂久久| 99热精品在线观看| 亚洲影视一区| 国产精品二区影院|