1) { echo 'first'; } else { echo 'first'; } for ($i = 1; $i <= $page_count; $i++) { // always show the first, last, step pages (10, 20, 30, etc.), // and the pages close to the current one if ( $i === 1 || // first page $i === $page_count || // last page $i === $browse_page || // current page $i === $browse_page -1 || $i === $browse_page +1 || $i === $browse_page -2 || $i === $browse_page +2 || ($i % $step_pages === 0 && $i > $max_visible_pages) // the step pages - 10, 20, etc. ) { if ($i === $browse_page) { // current page, no link if ($browse_page > 1) { echo '<<'; } else { echo '<<'; } echo '[' . htmlspecialchars($i) . ']'; if ($browse_page < $page_count) { echo '>>'; } else { echo '>>'; } } else { // other pages echo '[' . htmlspecialchars($i) . ']'; } // show ellipses between distant pages } elseif ( $i === $browse_page -3 || $i === $browse_page +3 ) { echo '...'; } } if ($browse_page < $page_count) { echo 'last'; } else { echo 'last'; } ?>