使用循环显示数组的下一个和上一个键

时间:2014-01-23 02:19:15

标签: php arrays math

我确定你会喜欢它;)。

我需要一个用于构建导航的功能,用于浏览书籍中的页面(某些页面可能已被分开并且应该来回循环);它应该将链接(作为数字)输出到给定页面的“下一页”和“上一页”。

接收数组和输入键的函数应该吐出数组给定键的值以及“next”和“previous”值的值。 但是,如果给定的键是数组中的第一个键,它应该输出数组的最后一个键作为“previous”。同样,如果它收到最后一个密钥,它应该输出第一个密钥为“next”。

这是我到目前为止所拥有的:

$pages = array(5, 1, 6, 8);
sort($pages);

$selected = 1; // that's second key (value:5, next:6, previous:1)
// $selected = 3; // that's forth and a last key (value:8, should return next:1, previous:6)

$selected = key($pages)+$selected;

while ($pointer = current($pages)) {

if ($selected == key($pages) ) {
        echo $pointer." - current <br>";
    }
elseif($selected+1 == key($pages) ){
    echo $pointer." - next <br>";
}
elseif($selected-1 == key($pages) ){
    echo $pointer." - previous <br>";
}

else
    echo $pointer."<br>";

    next($pages);
}

这应该可以正常工作(但没有'周期恍惚') - 您可以在http://writecodeonline.com/php/中快速查看 - 如果描述混淆了您,此代码的输出非常自我解释...... 我相信这很容易,但我没有想法,而且是凌晨3点。当然,我需要最简单的解决方案,因此可以采用一种比我选择的方式更简单的方法。

3 个答案:

答案 0 :(得分:1)

说实话真的很简单。

$pages = array(5, 1, 6, 8);
sort($pages);

//how many pages do we have 
$total = count($pages);

//replace with $_GET['page']; when ready
$requested_page = rand(0, ($total -1)); //$_GET['page'];

//the selected page 
$selected = $pages[$requested_page];

//if this isn't the first page
if($selected != $pages[0]):

    //get the previous page
    $prev = $requested_page-1;

    //standard issue
    echo '<a style="margin:0 15px;" href="myscript.php?page=', $pages[$prev] ,'"> Previous </a>';
endif;


//iterate each page
foreach($pages as $page):

    //a ternary operator to assign a class if this is the current page we're on or not
    $cls = ($page == $selected ) ? 'active' : false; //for your current page class

    //you don't need the style
    echo '<a class="', $cls ,'" href="myfile.php?page=', $page ,'">', $page ,'</a>';
endforeach;

//if this is not the last page
if(selected != $pages[$total]):

    //our next page
    $next = $requested_page+1;

    //standard issue
    echo '<a href="myscript.php?page=', $pages[$next] ,'"> Next </a>';
endif;

答案 1 :(得分:1)

我认为这是您问题的解决方案。告诉我它是否正在做你想要的(有些人检查你是否会超出数组界限会很好:)但是让我们坚持简单......):

/* This is from your code */
$pages = array(5, 1, 6, 8);
sort($pages);

$selected = 1; // that's second key (value:5, next:6, previous:1)
$selected = 3; // that's forth and a last key (value:8, should return next:1, previous:6)
/* ... */

$pages_count = count($pages);
$pages_ordered = array();
$pages_ordered["current"] = $pages[$selected];


foreach($pages as $order_number => $page)
{
    if($selected == 0) {
        $pages_ordered["previous"] = $pages[$pages_count - 1];
        $pages_ordered["next"] = $pages[$selected + 1];
    } elseif($selected == ($pages_count - 1)) {
        $pages_ordered["next"] = $pages[0];
        $pages_ordered["previous"] = $pages[$selected - 1];
    } else {
        $pages_ordered["next"] = $pages[$selected + 1];
        $pages_ordered["previous"] = $pages[$selected - 1]; 
    }
}

print_r($pages_ordered);

答案 2 :(得分:0)

尝试此功能

function get_nav($arr,$current){
    while($nav = current($arr)){
      if(key($arr)==$current){
         $prev =prev($arr);
         empty($prev)?reset($arr):''; 
         next($arr);
         $r = current($arr);
         $next = next($arr); 
         prev($arr);
         return array('prev'=>$prev,'current'=>$r,'next'=>$next);
      }
      next($arr);
    }

    return FALSE;
}

$pages = array(5, 1, 6, 8);
sort($pages);

$selected = 0;
$res = get_nav($pages,$selected);