久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

PHP中如何不用數據庫實現數組分頁

本篇文章給大家介紹一下PHP中不用數據庫實現數組分頁的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

PHP中如何不用數據庫實現數組分頁

PHP中的數組分頁實現(非數據庫)

在日常開發的業務環境中,我們一般都會使用 MySQL 語句來實現分頁的功能。但是,往往也有些數據并不多,或者只是獲取 PHP 中定義的一些數組數據時需要分頁的功能。這時,我們其實不需要每次都去查詢數據庫,可以在一次查詢中把所有的數據取出來,然后在 PHP 的代碼層面進行分頁功能的實現。今天,我們就來學習一下可以實現這個能力的一些函數技巧。

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

$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 項目都不會很多,但有時候也會達到需要分頁的程度,這時候,我們就可以考慮考慮使用今天所學的知識來做咯!

測試代碼:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202008/source/PHP%E4%B8%AD%E7%9A%84%E6%95%B0%E7%BB%84%E5%88%86%E9%A1%B5%E5%AE%9E%E7%8E%B0%EF%BC%88%E9%9D%9E%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%89.php

推薦學習:php視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
亚洲精品一级| 国产精品宾馆| 麻豆91小视频| 日韩精品a在线观看91| 丝袜国产日韩另类美女| 色偷偷色偷偷色偷偷在线视频| 日韩1区2区3区| 免费在线观看精品| 香蕉久久久久久久av网站| 久久精品成人| 欧美69视频| 国产女优一区| 一级成人国产| 91亚洲无吗| 国产一区二区三区探花| 欧美搞黄网站| 欧美日韩午夜电影网| 日韩在线短视频| 久久久天天操| 国产日韩一区| 欧美日韩国产传媒| 亚洲午夜av| 久久的色偷偷| 1024精品一区二区三区| 精品国产亚洲一区二区三区大结局| 九九精品调教| 亚洲v在线看| 欧美极品中文字幕| 最新日韩av| 亚洲小说春色综合另类电影| 久久久久亚洲| 欧美~级网站不卡| 精品在线播放| 国产精品66| 免费观看久久av| 亚洲精品欧美| 亚洲天堂日韩在线| 夜鲁夜鲁夜鲁视频在线播放| 欧美亚洲自偷自偷| 国产精品99一区二区三| 免费不卡中文字幕在线| 美女免费视频一区| 亚洲精品麻豆| 激情六月综合| 久久亚洲人体| 国产一区二区三区亚洲| 日韩精品午夜视频| 国产精品1区在线| 色在线中文字幕| 男人的天堂久久精品| 日韩精品久久理论片| 亚洲aa在线| 国产精品一线天粉嫩av| 欧美香蕉视频| 欧美日韩国产探花| 欧美欧美黄在线二区| 成人亚洲一区| 在线一区免费观看| 国产精品一区二区三区美女 | 国产成人精品亚洲线观看| 国产精品一区二区三区四区在线观看 | 国产第一亚洲| 蜜桃视频在线观看一区| 免费精品国产的网站免费观看| 亚洲综合色婷婷在线观看| 久久久精品日韩| 国产欧美日韩精品高清二区综合区| 亚洲夜间福利| 中文字幕av一区二区三区人| 欧美精品中文| 亚洲免费福利| 日韩专区在线视频| 老色鬼久久亚洲一区二区| 国际精品欧美精品| 国产欧美一区二区三区精品观看| 国产福利一区二区精品秒拍| 最近高清中文在线字幕在线观看1| 国产66精品| 欧美手机在线| 免费精品视频| 国产亚洲精品美女久久| 国产探花在线精品| 久久久精品午夜少妇| 国产精东传媒成人av电影| 精品视频91| 成人自拍av| 视频一区欧美精品| 另类欧美日韩国产在线| 久久精品二区亚洲w码| 亚洲a一区二区三区| 久久久久久美女精品| 国产高清一区| 精品视频在线一区二区在线| 国产毛片一区| www.51av欧美视频| 日韩中文字幕| 好看的亚洲午夜视频在线| 精品国产91| 午夜欧美巨大性欧美巨大| 久久免费国产| 日本亚洲视频在线| 日韩欧美不卡| 蜜桃精品在线| 中文字幕中文字幕精品| 国产伦精品一区二区三区千人斩| 综合在线一区| 午夜日韩福利| 国产成人1区| 97久久超碰| 首页欧美精品中文字幕| 久久伦理在线| 9999国产精品| 欧美经典一区| 日韩一区二区三区高清在线观看| 亚洲国内精品| 色婷婷亚洲mv天堂mv在影片| 国产精品午夜一区二区三区| 男女性色大片免费观看一区二区| 欧美色图一区| 久久久久久久久久久妇女 | 国产v综合v| 欧美成人a交片免费看| 亚洲尤物av| 99久久久久国产精品| 久久电影tv| 国产精品中文| 蜜臀av亚洲一区中文字幕| 欧美日韩精品一区二区视频| 亚洲成a人片| 久久av电影| 亚洲成av人片一区二区密柚| 国产情侣久久| 国产精品一区二区三区www| 美女av在线免费看| 国产精品高清一区二区| 国产精品美女| 亚洲激情婷婷| 99riav1国产精品视频| 欧美不卡高清一区二区三区| 黄色aa久久| 日韩和的一区二在线| 秋霞国产精品| 美美哒免费高清在线观看视频一区二区 | 国产亚洲精品自拍| 在线人成日本视频| 亚洲一区二区三区在线免费| 欧洲激情综合| 欧美精品一区二区久久| 亚洲激情偷拍| 久久国产欧美| 欧美va天堂在线| 久久精品福利| 亚洲午夜一级| 久久99伊人| 亚洲欧洲av| 日韩精品水蜜桃| 九九久久电影| 9色国产精品| 老司机久久99久久精品播放免费| 国产日韩专区| 亚洲另类视频| 青青国产精品| 久热精品在线| 久久精品国内一区二区三区水蜜桃| 成人在线视频免费| 欧美一级精品| 日本成人手机在线| 欧美日韩国产在线一区| 国产精品videossex| 日日夜夜免费精品| 国产在线不卡一区二区三区| 奇米亚洲欧美| 国产亚洲激情| 99久久久久| 另类专区亚洲| 麻豆精品久久久| 亚洲免费婷婷| 亚洲黄色网址| 日韩精品福利一区二区三区| 成人啊v在线| 欧美激情三区| 国产亚洲精品美女久久| 亚洲精品91| 综合激情在线| 在线观看亚洲精品福利片| 欧美a级片一区| 黑人精品一区| 亚洲精品美女| 国产精品夜夜夜| 精品视频在线一区二区在线| 亚洲色图综合| 成人一二三区| 亚洲一区导航| 免费在线观看一区二区三区| 国产精品久久久久毛片大屁完整版| 亚洲三区欧美一区国产二区| 国产激情欧美| 日韩一区二区三区在线免费观看| 国产精品视区| 日韩精选在线|