2016-11-18 88 views
2

上一頁和下一頁的鏈接我有一個這樣的數組:PHP,產生從陣列與數字

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

而且我想通過這些頁面進行簡單的HTML導航。只有「第一」,「最後」,「上一頁」和「下一頁」鏈接。 當我點擊'下一個'/'prev'鏈接時,他們必須相應地改變。 例如當我在389頁prev和next是209和440。如果我在440頁prev和next是389和527

回答

1

這裏有一個簡單的方法:

$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))]

0

試試這個:

<?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> 
0
<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> 
1
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); 
0

你可以試試這個

$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項最小的項目。