我意识到在SO上有几十个类似的问题,但我似乎无法找到适合我的应用程序的答案。我正在进行一些页面导航并拥有以下PHP数组,其中键是页面标识符,值是URL slugs:
$pages = array(
'a' => '/pages/first',
'b' => '/pages/another',
'c' => '/pages/third',
'd' => '/pages/something-else'
);
说出我的"当前"页面是'a'
。我希望$next_page
设置为'b'
,$previous_page
设置为'd'
。当然,因为"当前"页面为'a'
我可以执行此操作以获取$next_page
:
while(key($pages) !== null && key($pages) !== 'a') next($pages);
$next_page = next($pages);
但是,由于'a'
是数组的第一个元素,因此以下内容将$previous_page
设置为false
:
while(key($pages) !== null && key($pages) !== 'a') next($pages);
$previous_page = prev($pages);
所以给定一个关联数组,例如上面的$pages
,我怎样才能得到" next"和"之前"键即使当前"当前" key可以是数组的第一个或最后一个元素吗?
注意:$pages
必须是带有任意字符串键的关联数组。
答案 0 :(得分:1)
$key = 'a';
$keys = array_keys($pages);
$cur = array_search($key, $keys);
$next = $keys[($cur + 1) % count($keys)];
$prev = $keys[($cur - 1 + count($keys)) % count($keys)];
echo $pages[$prev] ."\n";
echo $pages[$next] ."\n";
结果
/pages/something-else
/pages/another
答案 1 :(得分:0)
使用数字键可能更容易,但通过移动指针可以实现这一点。只需检查false
并致电end()
:
while(key($pages) !== 'a' && next($pages));
if(($previous_page = prev($pages)) === false) { $previous_page = end($pages); }
如果next()
位于最后,d
,您的问题就会出现同样的问题。因此,只需检查false
并致电reset()
。
while(key($pages) !== 'd' && next($pages));
if(($next_page = next($pages)) === false) { $next_page = reset($pages); }
逻辑可能会缩短一点。