Спасибо
stump и
twin за советы, с их поправками будет так:
@param @param @param @return
function clamp ($int, $min, $max) {
$int = max($int, $min);
return min($int, $max);
}
@param @param @param @param @return
function limited_range ($center, $limit, $min, $max) {
if ($limit < 1) {
return array();
}
$range = array();
$half = intval($limit / 2);
$start = clamp($center - $half, $min + 1, $max - 1);
$end = clamp($center + $half, $min + 1, $max);
for ($i = $start; $i < $end; $range[] = $i, $i ++);
array_unshift($range, (int)$min);
array_push($range, (int)$max);
return $range;
}
@param @param @param @return
function pagination_generate ($total, $items, $page) {
$offset = $total > $items ? ($page - 1) * $items : 0;
$pages = ceil($total / $items);
$page = clamp($page, 1, $pages);
$limit = clamp($pages, 1, 9);
$pagination = limited_range($page, $limit, 1, $pages);
$limit = intval($items - $offset % $items);
return compact('offset', 'pages', 'page', 'pagination', 'limit');
}
По моему так уже лучше.
_____________
Мой блог