Как сделать разбиение на страницы из массива?

У меня есть массив с данными, которые я хочу отображать с разбивкой на страницы.

$display_array = Array ( [0] => "0602 xxx2", [1] => "0602 xxx3", [2] => 5 // Total= 2+3 [3] => "0602 xxx3", [4] => "0602 saa4", [5] => 7 // Total = 3+4 ) 

Я попробовал что-то вроде этого

 function pagination($display_array, $page) { global $show_per_page; $page = $page < 1 ? 1 : $page; $start = ($page - 1) * $show_per_page; $end = $page * $show_per_page; for($i = $start; $i < $end; $i++) { ////echo $display_array[$i] . "<p>"; // How to manipulate this? // To get the result as I described below. } } 

Я хочу сделать разбиение на страницы, чтобы получить ожидаемый результат следующим образом:

Если я определяю $show_per_page = 2; затем pagination($display_array, 1); выходы:

 0602 xxx2 0602 xxxx3 Total:5 

И paganation($display_array, 2); выходы:

 0602 xxx3 0602 saa4 Total:7 

Если я определяю $show_per_page = 3; , затем pagination($display_array, 1); выходы:

 0602 xxx2 0602 xxxx3 Total: 5 0602 xxx3 

И paganation($display_array, 2); выходы:

 0602 saa4 Total:7 

Если я определяю $show_per_page = 4; выходы:

 0602 xxx2 0602 xxxx3 Total:5 0602 xxx3 0602 saa4 Total: 7 

Related of "Как сделать разбиение на страницы из массива?"

Посмотри на это:

  function paganation($display_array, $page) { global $show_per_page; $page = $page < 1 ? 1 : $page; // start position in the $display_array // +1 is to account for total values. $start = ($page - 1) * ($show_per_page + 1); $offset = $show_per_page + 1; $outArray = array_slice($display_array, $start, $offset); var_dump($outArray); } $show_per_page = 2; paganation($display_array, 1); paganation($display_array, 2); $show_per_page = 3; paganation($display_array, 1); paganation($display_array, 2); 

Выход:

 // when $show_per_page = 2; array 0 => string '0602 xxx2' (length=9) 1 => string '0602 xxx3' (length=9) 2 => int 5 array 0 => string '0602 xxx3' (length=9) 1 => string '0602 saa4' (length=9) 2 => int 7 // when $show_per_page = 3; array 0 => string '0602 xxx2' (length=9) 1 => string '0602 xxx3' (length=9) 2 => int 5 3 => string '0602 xxx3' (length=9) array 0 => string '0602 saa4' (length=9) 1 => int 7 

Результат для $ show_per_page = 3 отличается от вашего, но я не уверен, чего вы ожидаете? Вы хотите получить все, что осталось (т.е. «0602 saa4» и 7) плюс один предыдущий элемент (т.е. «0602 xxx3»)?

Использовать array_chunk :

 function paginate($array, $pageSize, $page = 1) { $pages = array_chunk($array, $pageSize); return $page > sizeof($pages) ? [] : $pages[$page - 1]; } 

или используйте более чистую версию ответа Марцина:

 function paginate($array, $pageSize, $page = 1) { $page = $page < 1 ? 1 : $page; $start = ($page - 1) * $pageSize; return array_slice($array, $start, $pageSize); } 

$ output = array_slice ($ inputArray, $ page-1, $ showPerPage); $ output будет содержать требуемый интервал. $ total = sizeof ($ inputArray); / общее количество элементов в массиве /