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

How can I get the prev/next key from an 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() 函数告诉下一个和上一个。我还没有做到这一点。

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

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

所以你会有这样的数组 ($keys):

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

现在您只需 array_search() 您的 $currentPage 键即可将当前键作为数字键,并根据需要加或减一个(然后您还想检查 next/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
$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);