成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

PHP 實現數組分頁

瀏覽:12日期:2022-09-06 18:48:41
目錄array_slicearray_chunkLimitIterator參數錯誤時的表現總結

今天,我們就來學習一下可以實現這個能力的一些函數技巧。

首先,我們還是準備好測試數據。

$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;

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

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

array_slice

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

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

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

array_chunk

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

$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'// }

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

LimitIterator

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

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

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

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'參數錯誤時的表現

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

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() 函數對于偏移量錯誤的兼容就是展示一個空的數組。而數據量超標的話則會展示所有偏移量之后的數據。

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

array_chunk() 對于下標不存在的數據當然就是返回一個 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 則是對于偏移量錯誤的數據直接返回錯誤異常信息了。這也是類模式處理的好處,有錯誤都會以異常的形式進行返回,方便我們對異常進行后續的處理。

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

總結

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

測試代碼

以上就是PHP 實現數組分頁的詳細內容,更多關于PHP 數組分頁的資料請關注好吧啦網其它相關文章!

標簽: PHP
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美成人午夜电影| 欧美91视频| 99精品视频在线免费观看| 欧美亚洲综合色| 午夜伊人狠狠久久| 亚洲一区二区三区在线看| 亚洲日产国产精品| 亚洲视频狠狠干| 99热在线精品观看| 亚洲免费资源在线播放| 亚洲大胆在线| 亚洲女与黑人做爰| 日韩视频精品在线观看| 亚洲精品久久久蜜桃| 99精品视频免费| 一区二区三区**美女毛片| 91丨porny丨国产| 国产亚洲精品bt天堂精选| 97se亚洲国产综合自在线| 久久久夜色精品亚洲| 欧美va亚洲va日韩∨a综合色| 亚洲精品一区二区三区福利| av中文字幕亚洲| 久久久三级国产网站| 91免费版在线| 中文字幕在线观看不卡| 亚洲激情黄色| 亚洲免费三区一区二区| 国产女主播一区二区| 亚洲成人tv网| 在线观看国产日韩| 国产一区二三区好的| 欧美一区二区三区播放老司机| 国产电影精品久久禁18| 欧美大片拔萝卜| 91麻豆精东视频| 国产精品久久久久久久蜜臀| 亚洲国产激情| 亚洲成人激情自拍| 欧美三级中文字| 成人一区二区在线观看| 国产日产欧美一区二区三区| 尤妮丝一区二区裸体视频| 亚洲午夜在线电影| 91精彩视频在线| 国产毛片一区二区| 精品999在线播放| 国产一区二区三区四区三区四| 亚洲九九爱视频| 日本道免费精品一区二区三区| 激情综合五月婷婷| 日韩欧美国产1| 国产精品xnxxcom| 亚洲午夜羞羞片| 欧美日本视频在线| 99国产精品国产精品久久| 亚洲欧美中日韩| 色综合久久久久综合体| 国产91露脸合集magnet| 国产精品视频观看| 麻豆久久精品| 精品午夜一区二区三区在线观看| 欧美www视频| 亚洲激情不卡| 久久不见久久见免费视频7| 精品国产一区二区亚洲人成毛片 | 国产高清不卡一区| 国产精品免费视频一区| 午夜一区二区三视频在线观看| 卡一卡二国产精品 | 欧美一级欧美一级在线播放| 欧美精品日本| 日韩精品视频网| 欧美成人午夜电影| 国产偷久久久精品专区| 国产老女人精品毛片久久| 中文字幕一区二区三区在线播放 | 国产精品久久久久天堂| 在线视频国内自拍亚洲视频| 成人免费av在线| 一区二区三区免费在线观看| 宅男噜噜噜66一区二区66| 黄色精品一区| 国产精品一区二区在线看| 亚洲欧美综合另类在线卡通| 欧美日韩在线观看一区二区| 亚洲激情视频| 国产精品一区二区你懂的| 国产精品久久久久久亚洲伦| 欧美色欧美亚洲另类二区| 亚洲视频一二| 国产高清一区日本| 亚洲一区二区三区自拍| 久久伊99综合婷婷久久伊| 久久av二区| 91天堂素人约啪| 免费观看成人鲁鲁鲁鲁鲁视频| 国产网红主播福利一区二区| 欧美在线看片a免费观看| 国产综合精品| 国产麻豆精品在线| 亚洲午夜三级在线| 久久久www成人免费毛片麻豆| 久久国产一二区| 国产综合欧美在线看| 国产精品白丝jk黑袜喷水| 亚洲va在线va天堂| 国产精品三级电影| 日韩欧美自拍偷拍| 久久高清免费观看| 欧美日韩理论| 国产麻豆精品一区二区| 亚洲电影在线免费观看| 久久久久国产免费免费| 欧美性高清videossexo| 日韩天天综合| 91在线观看美女| 韩国成人精品a∨在线观看| 一区二区三区日本| 国产三级一区二区| 91麻豆精品国产91久久久| 国产精品乱码一区二区三区| 92精品国产成人观看免费| 久久99国产精品麻豆| 亚洲最新视频在线观看| 国产精品免费视频一区| 精品久久99ma| 欧美电影影音先锋| 91久久精品一区二区三| 亚洲精品乱码久久久久久蜜桃麻豆 | 午夜国产精品视频免费体验区| 国产一区二区三区四区老人| 日韩欧美国产小视频| 日本一区二区免费在线 | 1024亚洲合集| 麻豆精品在线看| 欧美在线精品一区| 精品对白一区国产伦| 欧美午夜电影在线播放| 亚洲一区视频| 亚洲国产wwwccc36天堂| 中文字幕日本不卡| 久久精品一二三| 欧美精品乱人伦久久久久久| 色播五月激情综合网| 久久精品官网| 亚洲欧美日韩国产一区| 亚洲视频久久| 欧美精选在线| 色综合久久综合网| 91丨porny丨最新| 成人av小说网| 国产成人午夜精品5599| 激情另类小说区图片区视频区| 婷婷六月综合亚洲| 亚洲妇熟xx妇色黄| 一区二区理论电影在线观看| 亚洲视频免费在线| 国产精品网站在线观看| 国产欧美日韩久久| 久久久久久亚洲综合影院红桃| 日韩美女主播在线视频一区二区三区| 欧美日韩精品高清| 欧美影视一区在线| 91久久国产综合久久| 久久精品日产第一区二区| 国产精品手机在线| 国产精品亚洲综合色区韩国| 国产日韩在线一区二区三区| 亚洲深夜福利| 91国在线观看| 欧美色爱综合网| 欧美精品一卡二卡| 6080日韩午夜伦伦午夜伦| 9191精品国产综合久久久久久| 51精品久久久久久久蜜臀| 欧美一级片在线| 精品对白一区国产伦| 久久久不卡影院| 国产精品嫩草影院com| 成人欧美一区二区三区| 亚洲人成小说网站色在线| 亚洲综合一区二区三区| 天天影视色香欲综合网老头| 日本欧美大码aⅴ在线播放| 免费成人在线网站| 精品无人区卡一卡二卡三乱码免费卡| 黑人精品欧美一区二区蜜桃| 国精品**一区二区三区在线蜜桃| 国产毛片精品视频| av一区二区三区黑人| 欧美另类视频在线| 亚洲经典在线看| 米奇777在线欧美播放| 欧美吻胸吃奶大尺度电影| 在线不卡免费欧美| 26uuu色噜噜精品一区二区| 国产精品欧美久久久久一区二区 | 欧美极品美女视频| 综合久久久久综合|