我有一个这样的数组:
$pages = (1, 29, 209, 389, 440, 527)
我想通过这些页面进行简单的HTML导航。只有"first","last","prev"answers"next"链接。当我点击"下一个"/"上一个"链接时,它们必须相应地改变。例如,当我读到389页时,前面是209页,后面是440页。如果我翻到440页,前面是389页,后面是527页
这里有一个简单的方法:
$pages = array(1, 29, 209, 389, 440, 527);
$current = isset($_GET['page']) ? $_GET['page'] : $pages[0];
// current page
$key = array_search($current, $pages);
echo 'current page: ' . $pages[$key] . '<br />';
// previous page
$prev = $key - 1;
if ($prev >= 0 && $prev < count($pages)) {
echo '<a href="?page=' . $pages[$prev] . '">prev</a> | ';
} else {
echo 'prev | ';
}
// next page
$next = $key + 1;
if ($next >= 0 && $next < count($pages)) {
echo '<a href="?page=' . $pages[$next] . '">next</a>';
} else {
echo 'next';
}
假设键始终是有序的,那么第一页将始终在$pages[0]
,并获得最后一页,您可以使用$pages[key(array_slice($pages, -1, 1, true))]
function printPager($pageList,$currentPage)
{
$links="";
if(($currentIndex = array_search($currentPage, $pageList))!== NULL)
{
$links .=
//first
($currentIndex!=0?"<a href='/".($pageList[0])."'>First</a> ":"") .
//prev
(isset($pageList[$currentIndex-1])?"<a href='/".($pageList[$currentIndex-1])."'>Prev</a> ":"").
//next
(isset($pageList[$currentIndex+1])?"<a href='/".($pageList[$currentIndex+1])."'>Next</a> ":"").
//last
($currentIndex!=count($pageList)-1?"<a href='/".($pageList[count($pageList)-1])."'>Last</a>":"");
}
echo $links;
}
printPager(array(20,4,10,14),20);
try this:
<?php
$pages = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$active = 1;
$last = false;
$next = false;
if (isset($_GET['page']))
{
$active = $_GET['page'];
$last = $active - 1;
$next = $active + 1;
if (!in_array($next, $pages))
{
$next = false;
}
if (($last < 0) or !in_array($last, $pages))
{
$last = false;
}
}
?>
<ul>
<li>
<a href="<?= $last != false ? '?page=' . $last : '' ?>"><- LAST</a>
</li>
<?php foreach ($pages as $page): ?>
<li><a href="?page=<?= $page ?>"><?= $page ?> <?= $page == $active ? ' is active!' : ''?></a></li>
<?php endforeach; ?>
<li>
<a href="<?= $next != false ? '?page=' . $next : '' ?>">NEXT -></a>
</li>
</ul>
<ul>
<?php
$pages = [1,4,89,100,121,224,443,527];
$thisPage = $_GET['page'];
foreach($pages as $key => $page){
if($thisPage == $page){
$thisPageKey = $key;
}
}
foreach($pages as $key => $page){
if($key==0){
echo '<li><a href="HOST?page='.$pages[0].'">first</a></li>';
}
if($key+1==count($pages)){
echo '<li><a href="HOST?page='.$pages[$key].'">last</a></li>';
}
if(array_key_exists($thisPageKey-1, $pages) && $thisPage == $page){
echo '<li><a href="HOST?page='.$pages[$thisPageKey-1].'">prev</a></li>';
}
if(array_key_exists($thisPageKey+1, $pages) && $thisPage == $page){
echo '<li><a href="HOST?page='.$pages[$thisPageKey+1].'">next</a></li>';
}
}
?>
</ul>
你可以试试这个
$pages=array(1, 29, 209, 389, 440, 527);
foreach ( $array_keys=array_keys($pages) as $array_keys) {
$pages_invert[ $pages[$array_keys] ]=$array_keys;
}
echo '<a href="navi.php?page_id='.$pages[0].'">first ('.$pages[0].')</a>';
echo ' | ';
if( $pages_invert[$_GET['page_id']]-1 >= 0 ) echo '<a href="navi.php?page_id='.$pages[$pages_invert[$_GET['page_id']]-1].'">previous ('.$pages[$pages_invert[$_GET['page_id']]-1].')</a> ';
else echo 'previous';
echo ' | ';
echo 'current ('.$_GET['page_id'].')';
echo ' | ';
if( $pages_invert[$_GET['page_id']]+1 <= 5 ) echo '<a href="navi.php?page_id='.$pages[$pages_invert[$_GET['page_id']]+1].'">next ('.$pages[$pages_invert[$_GET['page_id']]+1].')</a>';
else echo 'next';
echo ' | ';
echo '<a href="navi.php?page_id='.$pages[count($pages)-1].'">last ('.$pages[count($pages)-1].')</a>';
foreach命令在$pages数组中从当前键跳转到上一个键和下一个键,对原始的数组进行反转。预览数组的样子,输入下面的代码:$pages数组定义之后的任何一行
<?
echo '<pre>';
print_r($pages);
echo '</pre>';
echo '<pre>';
print_r($pages_invert);
echo '</pre>';
?>
请注意$pages数组中的最小条目数为3个