PHP,产生从阵列与数字

问题描述:

上一页和下一页的链接我有一个这样的数组:PHP,产生从阵列与数字

$pages = (1, 29, 209, 389, 440, 527) 

而且我想通过这些页面进行简单的HTML导航。只有“第一”,“最后”,“上一页”和“下一页”链接。 当我点击'下一个'/'prev'链接时,他们必须相应地改变。 例如当我在389页prev和next是209和440。如果我在440页prev和next是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))]

试试这个:

<?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> 

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); 

你可以试试这个

$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命令在$页阵列,使原来的阵列用于跳跃的反转,从目前到一个和下一个数组的键。

要预览阵列的样子,把这个代码: 任何线ARTER您$网页数组定义

<? 
echo '<pre>'; 
print_r($pages); 
echo '</pre>'; 

echo '<pre>'; 
print_r($pages_invert); 
echo '</pre>'; 
?> 

请注意在$页面阵列是3项最小的项目。