PHP,从数组与数字生成上一个和下一个链接


PHP, generate previous and next links from array with numbers

我有一个这样的数组:

$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个