【问题标题】:PHP, generate previous and next links from array with numbersPHP,从带有数字的数组生成上一个和下一个链接
【发布时间】:2016-11-18 16:40:54
【问题描述】:

我有一个这样的数组:

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

我想通过这些页面进行简单的 HTML 导航。只有“第一个”、“最后一个”、“上一个”和“下一个”链接。 当我单击“下一个”/“上一个”链接时,它们必须相应地更改。 例如。当我在第 389 页 prev 和 next 是 209 和 440。如果我在第 440 页 prev 和 next 是 389 和 527。

【问题讨论】:

    标签: php arrays


    【解决方案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))]

    【讨论】:

      【解决方案2】:
      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);
      

      【讨论】:

        【解决方案3】:

        试试这个:

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

        【讨论】:

          【解决方案4】:
          <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>
          

          【讨论】:

            【解决方案5】:

            你可以试试这个

            $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 命令会反转您的原始 array,以便在 $pages 数组中从当前到上一个和下一个数组键跳转。 p>

            要预览数组的外观,请输入以下代码: $pages 数组定义

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

            请注意 $pages 数组中的最少项目为 3 个。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-26
              • 1970-01-01
              • 2015-06-24
              相关资源
              最近更新 更多