我正在研究一个菜单系统,正在研究一些复杂的问题。菜单是从数组生成的。这个数组包含在pastebin中,因为它非常大。我想在数组中搜索并获取我正在搜索的值的分层路径,同时获取您运行的父级旁边的值。正如我所说的那么复杂。
在pastebin中是数组和我想要返回的结果:
我尝试过写这个功能很多次,但总是卡在中间。
答案 0 :(得分:1)
这是一个功能:
function get_item_recursive($id, $menu_array = array())
{
foreach($menu_array as $menu_item)
{
if(isset($menu_item['id']) && $menu_item['id'] == $id)
{
$menu_item['subitems'] = array();
return $menu_item;
}
else
{
if(isset($menu_item['subitems']) && !empty($menu_item['subitems']))
{
$found = get_item_recursive($id, $menu_item['subitems']);
if($found)
{
return $menu_item;
}
}
}
}
return FALSE;
}
我没有测试过,但这是个主意。
答案 1 :(得分:0)
你基本上是在寻找构建像面包屑这样的东西的路径?您可以使用递归函数:
function findPath($haystack, $id, $parents = array()) {
foreach ($haystack as $k => $v) {
if ($v['id'] == $id) {
return array_merge($parents, array($v));
} else if (!empty($v['subitems'])) {
unset($v['subitems']);
$return = findPath(
$haystack[$k]['subitems'],
$id,
array_merge($parents, array($v))
);
if ($return) return $return;
}
}
return false;
}
执行此功能:
findPath($haystack, 11);
会回来:
Array (
[in-balans] => Array
(
[id] => 2
[slug] => in-balans
[title] => In balans
)
[arbodienstverlening] => Array
(
[id] => 10
[slug] => arbodienstverlening
[title] => Arbodienstverlening
)
[arbo] => Array
(
[id] => 11
[slug] => arbo
[title] => Arbo
[subitems] =>
)
)