【问题标题】:How can I get the prev/next key from an associative array?如何从关联数组中获取上一个/下一个键?
【发布时间】:2015-11-14 11:18:34
【问题描述】:

我有一组页面 ($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() 函数告诉下一个和上一个。我还没有实现它。

【问题讨论】:

  • 您能否提供输入和所需输出的示例?我不确定你想做什么

标签: php arrays key associative-array


【解决方案1】:

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

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

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

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

现在您只需在键中 array_search()$currentPage 即可将当前键作为数字键并根据您的需要添加或减去一个(然后您还想检查下一个/上一个键是否存在,这样您没有未定义的索引)。

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

【讨论】:

  • 这帮助很大!!谢谢!
  • 不错。虽然扮演魔鬼的拥护者 - 如果您“第一页”或“第三页”,这将触发 PHP 通知(未定义的偏移量)。请注意,这可能是 OP 的边界检查练习。
  • @Darragh 我在回答中说过:(您还想检查下一个/上一个键是否存在,这样您就没有未定义的索引)
  • 对不起,你确实做到了。我有只看代码的习惯:)
【解决方案2】:
$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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多