我們的數據未必都是存儲在數據庫中,很多時候是用數組來組織的。所以獲取數組數據,進行分頁是比較常見的編程要求。分頁的原理很簡單,就是按分頁數獲取某個范圍的數據而已,PHP給我們提供了一個很便利的函數:array_slice()。array_slice() 函數在數組中根據條件取出一段值,並返回。
下面舉兩個分頁例子,都很簡單。
public function books($pagenum = 1) { include_once("page.php"); include("arr_books.php"); foreach ($data['books'] as $key=>$value){ $name[$key] = $value['name']; $rank[$key] = $value['rank']; } array_multisort($rank,SORT_NUMERIC,SORT_DESC,$data['books']); // 倒序 //array_multisort($rank,SORT_NUMERIC,SORT_ASC,$data['books']); // 順序 $perpage = 10; $count = count($data['books']); $pages = new PageClass($count, $perpage, $pagenum, base_url().'veda/books/{page}/'); $start = ($pagenum - 1) * $perpage; $data['bks'] = array_slice($data['books'], $start, $perpage); $data['nav'] = $pages -> myde_write($pagenum); $this->load->view('header', $data); $this->load->view('books', $data); $this->load->view('footer', $data); }
再來一個:
$perpage = 2; $page = intval(getgpc('page')) ? intval($_G['gp_page']) : 1; $start = ($page - 1) * $perpage; $count = count($group_list); $list = array_slice($group_list, $start, $perpage); $multipage = multi($count, $perpage, $page, "home.php?mod=space&do=group&type=".getgpc('type'));
array_slice() 函數在數組中根據條件取出一段值,並返回。如果數組有字符串鍵,所返回的數組將保留鍵名。
語法:array_slice(array,offset,length,preserve)
必需。數值。規定取出元素的開始位置。
如果是正數,則從前往後開始取,如果是負值,從後向前取 offset 絕對值。
length可選。數值。規定被返回數組的長度。
如果是負數,則從後向前,選取該值絕對值數目的元素。如果未設置該值,則返回所有元素。
preserve可選。可能的值:
例子 1:
<?php $a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird"); print_r(array_slice($a,1,2)); // Array ( [0] => Cat [1] => Horse ) ?>
例子 2(帶有負的 offset 參數):
<?php $a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird"); print_r(array_slice($a,-2,1)); // Array ( [0] => Horse ) ?>
例子 3(preserve 參數設置為 true):
<?php $a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird"); print_r(array_slice($a,1,2,true)); // Array ( [1] => Cat [2] => Horse ) ?>
例子 4(帶有字符串鍵):
<?php $a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse","d"=>"Bird"); print_r(array_slice($a,1,2)); // Array ( [b] => Cat [c] => Horse ) ?>