php將一個二維陣列分頁
阿新 • • 發佈:2018-12-19
將一個二維陣列分頁,假設每頁顯示10條 一個列表的分頁,一般是從資料庫查出來,查出來是一個二維陣列,然後渲染到列表,這裡分頁就是查資料庫的時候只查每頁的條數,如果每頁有十條,就只查十條,但是這個二維陣列不是從資料庫查出來的呢,而是最開始就把所有的資料存在這個數組裡面了,也要渲染到列表,怎麼分頁, 有一個笨方法,通過下標,從這個二位數組裡面通過下標選取十個一位陣列,重新組成一個二位陣列 假設一個二維陣列如下,為了每頁10條能夠顯示兩頁,就做了12條資料
$arr = array( array('name'=>'第一頁張三1','mobile'=>'111111111'), array('name'=>'第一頁李四1','mobile'=>'222222222'), array('name'=>'第一頁王五1','mobile'=>'333333332'), array('name'=>'第一頁李四2','mobile'=>'444444444'), array('name'=>'第一頁張三2','mobile'=>'555555555'), array('name'=>'第一頁王五2','mobile'=>'666666666'), array('name'=>'第一頁張三3','mobile'=>'777777777'), array('name'=>'第一頁李四3','mobile'=>'888888888'), array('name'=>'第一頁王五3','mobile'=>'999999999'), array('name'=>'第一頁李四4','mobile'=>'123456789'), array('name'=>'第二頁張三4','mobile'=>'987654321'), array('name'=>'第二頁王五4','mobile'=>'112233445'), ); //前端傳過來的頁數,第幾頁 $p = I('p'); if (empty($p)){ $p = 1; } //開始取值的下標,陣列下標是從0開始的,例如第一頁從下標為0開始取,第二頁從下標為10開始取 $start = ($p-1)*10; //根據開始的下標,和需要取的資料的條數(每頁顯示的條數)迴圈賦值給新陣列 for ($i=$start;$i<$start+10;$i++){ if (!empty($arr[$i])){ $new_arr[$i] = $arr[$i]; } } dump($new_arr);
打印出來結果:
封裝一下:
public function arr_page($arr,$p,$count){ if (empty($p)){ $p = 1; } if (empty($count)){ $count = 10; } $start = ($p-1)*$count; for ($i=$start;$i<$start+$count;$i++){ if (!empty($arr[$i])){ $new_arr[$i] = $arr[$i]; } } return $new_arr; }
呼叫:打印出來結果一樣的
$new_arr = $this->arr_page($arr,1,10);
dump($new_arr);
呼叫的時候也可以傳其他引數,不一定每頁十條,
$new_arr = $this->arr_page($arr,1,5); $new_arr = $this->arr_page($arr,2,5);
至於有多少頁,就用count($arr)除以你每頁的條數,如果有小數,加1,這樣就可以分頁了