2011-02-01 2 views
0

У меня есть массив $ myarray; Я хочу отформатирует содержимое массива, вот что я имею в виду делать:Paginate a array

//Find total number of rows 
     $all_rs = $newArrayOfRows; 
     $this->total_rows = count($all_rs); 


     //Max number of pages 
     $this->max_pages = ceil($this->total_rows/$this->rows_per_page); 
     if ($this->links_per_page > $this->max_pages) { 
      $this->links_per_page = $this->max_pages; 
     } 


     //Check the page value just in case someone is trying to input an aribitrary value 
     if ($this->page > $this->max_pages || $this->page <= 0) { 
      $this->page = 1; 
     } 


     //Calculate Offset 
     $this->offset = $this->rows_per_page * ($this->page - 1); 


     //Fetch the required result set 

Как я присоединиться все эту информацию для того, чтобы забрать из моего исходного массива только информация мне нужно для каждой страницы ? Ty очень

ответ

0
$array = array_slice($all_rs, $this->offset, $this->rows_per_page); 

So $array будет содержать требуемое подмножество.

0

Array slice должен это сделать.

array array_slice(array, offset[, length]); 
array: Base array to be used 
int offset: Starting element index 
int length (optional): 

Но вы уверены, что хотите скопировать данные таким образом?

вы можете просто хотите аксессора, что дает вам пункт один страница любит этот

$ пункт = c-> GetItem ($ PageNumber, $ ItemNumber);

+0

Я просто новичок, это как фишинг в темноте, с вашей помощью куда-то куда-то ... так что я не уверен ни в чем, если у вас есть идее, отправьте его, заполните :) Очень много для ответа, дайте мне посмотреть, если это сработает – webmasters

2

Я угадываю из вашей переменной $all_rs, что ваш массив является результирующим набором базы данных.

Если это так, вы должны выбрать только строки, которые хотите отобразить на данной странице из базы данных.

Вы не должны извлекать каждую строку в таблице, а только отображать некоторые из них. Как только ваш сайт будет иметь реальный трафик, это будет слишком много для вашего сервера, чтобы он работал, и весь сайт перестанет функционировать. Просить больше данных, чем нужно ...

  1. Отходы памяти держат все результаты, которые вы никогда не будете использовать
  2. траты времени/пропускную способность передачи их от сервера базы данных на PHP
  3. ОТХОДОВ процессорного времени нахождения строки, которые вы не собираетесь использовать
  4. Отходы диск чтения IO строк, которые вы не собираетесь использовать с жестких дисков
  5. Wwastes еще несколько оперативной памяти, заполняя кеш запросов небольшими большими наборами результатов вместо многих меньших ,

Чтобы получить только те строки, нужно использовать пункт LIMIT в вашем запросе, который позволяет указать количество строк, извлекаемым и смещение (сколько строк пропустить). Логика по сути такая же, как вы сейчас придумываете, чтобы понять, как нарезать массив. Вместо этого вы используете его, чтобы выяснить, какие числа нужно разместить в части запроса базы данных LIMIT.

0

Похоже, $newArrayOfRows является моим. ;)

//Find total number of rows 
$all_rs = $newArrayOfRows; 
$this->total_rows = count($all_rs); 


//Max number of pages 
$this->max_pages = ceil($this->total_rows/$this->rows_per_page); 
if ($this->links_per_page > $this->max_pages) { 
    $this->links_per_page = $this->max_pages; 
} 


//Check the page value just in case someone is trying to input an aribitrary value 
if ($this->page > $this->max_pages || $this->page <= 0) { 
    $this->page = 1; 
} 


//Calculate Offset 
$this->offset = $this->rows_per_page * ($this->page - 1); 


//Fetch the required result set 

for($n = $this->offset;$n < $this->rows_per_page;$n++){ 
    $thisPageArray[] = $newArrayOfRows[$n]; 
} 

//NOW $thisPageArray HAS THE ROWS OF THIS PAGE.