1. 程式人生 > >php將一個二維陣列分頁

php將一個二維陣列分頁

 將一個二維陣列分頁,假設每頁顯示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,這樣就可以分頁了