给定一个 PHP 关联数组和一个 "current" 键,计算 "next" 和 "previous" 元素(循环)
Given a PHP associative array and a "current" key, calculate the "next" and "previous" elements (with looping)
我知道 SO 上有很多类似的问题,但我似乎找不到适合我的应用程序的答案。我正在做一些页面导航并有以下 PHP 数组,其中键是页面标识符,值是 URL slugs:
$pages = array(
'a' => '/pages/first',
'b' => '/pages/another',
'c' => '/pages/third',
'd' => '/pages/something-else'
);
假设我的 "current" 页面是 'a'
。我想将 $next_page
设置为 'b'
并将 $previous_page
设置为 'd'
。当然,由于 "current" 页面是 '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" 和 "previous" 键,即使 "current" 键可能是第一个或数组的最后一个元素?
注意:$pages
必须是具有任意字符串键的关联数组。
$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
使用数字键可能更容易,但这是您移动指针的方式。只需检查 false
并调用 end()
:
while(key($pages) !== 'a' && next($pages));
if(($previous_page = prev($pages)) === false) { $previous_page = end($pages); }
如果 next()
位于末尾,您将遇到与 next()
相同的问题,在您的示例中为 d
。所以只需检查 false
并调用 reset()
.
while(key($pages) !== 'd' && next($pages));
if(($next_page = next($pages)) === false) { $next_page = reset($pages); }
逻辑可能会缩短一点。
我知道 SO 上有很多类似的问题,但我似乎找不到适合我的应用程序的答案。我正在做一些页面导航并有以下 PHP 数组,其中键是页面标识符,值是 URL slugs:
$pages = array(
'a' => '/pages/first',
'b' => '/pages/another',
'c' => '/pages/third',
'd' => '/pages/something-else'
);
假设我的 "current" 页面是 'a'
。我想将 $next_page
设置为 'b'
并将 $previous_page
设置为 'd'
。当然,由于 "current" 页面是 '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" 和 "previous" 键,即使 "current" 键可能是第一个或数组的最后一个元素?
注意:$pages
必须是具有任意字符串键的关联数组。
$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
使用数字键可能更容易,但这是您移动指针的方式。只需检查 false
并调用 end()
:
while(key($pages) !== 'a' && next($pages));
if(($previous_page = prev($pages)) === false) { $previous_page = end($pages); }
如果 next()
位于末尾,您将遇到与 next()
相同的问题,在您的示例中为 d
。所以只需检查 false
并调用 reset()
.
while(key($pages) !== 'd' && next($pages));
if(($next_page = next($pages)) === false) { $next_page = reset($pages); }
逻辑可能会缩短一点。