如何从关联数组中获取prev / next键?

时间:2015-08-20 17:28:14

标签: php arrays key associative-array

我有一个页面数组($menuItems)。我把它设置成这样:"pagename" => "pagelink"。我有一个变量($currentPage)跟踪当前页面是什么。

我想要完成的是获取页面名称的变量,遍历列表并确定哪个是下一页(我的数组中的下一个项目),哪个是前一个。

我设置了一个while循环,尝试将内部指针更改为当前页面。但是,我相信我创建了一个无限循环,或者是因为它不会加载我的结果。

以下是我的代码示例:

$menuItems = array (
    "Page one" => "index.php?page=page_one",
    "Page two" => "index.php?page=page_two",
    "Page three" => "index.php?page=page_three"
  )

$currentPage = "Page two";
$key = key($menuItems);

 while ($currentPage !== $key){
    next($menuItems);
 }

在我将内部指针设置为正确的数组项后,我想使用next()prev()函数告诉next和prev。我没有足够的实现它。

2 个答案:

答案 0 :(得分:5)

我认为这是一个更简单的解决方案:

只需将所有关联键保存到array_keys()的数组中,这样就可以使用数字键访问键(数组)。

所以你将得到一个这样的数组($keys):

Array
(
    [0] => Page one
    [1] => Page two
    [2] => Page three
)

现在您只需array_search()键中的$currentPage即可将当前键作为数字键并且您想要添加或减去一个键(您还需要检查下一个/ prev键存在,因此您没有未定义的索引。)

<?php

    $menuItems = array (
        "Page one" => "index.php?page=page_one",
        "Page two" => "index.php?page=page_two",
        "Page three" => "index.php?page=page_three"
      );

    $keys = array_keys($menuItems);
    $currentPage = "Page two";
    $currentNumericalKey = array_search($currentPage, $keys);

    echo "Next item: " . $menuItems[$keys[$currentNumericalKey+1]] . "<br>";
    echo "Prev item: " . $menuItems[$keys[$currentNumericalKey-1]] . "<br>";

?>

输出:

Next item: index.php?page=page_three
Prev item: index.php?page=page_one

答案 1 :(得分:0)

$menuItems = array (
    "Page one" => "index.php?page=page_one",
    "Page two" => "index.php?page=page_two",
    "Page three" => "index.php?page=page_three"
  )

$currentPage = "Page two";

while (key($menuItems) !== $currentPage){
    next($menuItems);
} 

$nextPage = next($menuItems);