我正在研究菜單系統,並且正在處理一些複雜的問題。該菜單由數組生成。這個數組包含在一個pastebin中,因爲它真的很大。我想在數組中搜索,並獲取我正在搜索的值的層次結構路徑,同時還可以獲取您運行低谷的父代旁邊的值。正如我所說的那樣相當複雜。搜索具有相關值的數組路徑
在引擎收錄是我想要函數返回數組和結果:
我試着寫這個功能了好幾次,但總是會卡在中間。
我正在研究菜單系統,並且正在處理一些複雜的問題。該菜單由數組生成。這個數組包含在一個pastebin中,因爲它真的很大。我想在數組中搜索,並獲取我正在搜索的值的層次結構路徑,同時還可以獲取您運行低谷的父代旁邊的值。正如我所說的那樣相當複雜。搜索具有相關值的數組路徑
在引擎收錄是我想要函數返回數組和結果:
我試着寫這個功能了好幾次,但總是會卡在中間。
這裏是一個函數:
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;
}
我沒有測試過,但是這是想法。
這就是我正在尋找的 – RJD22 2010-11-11 10:09:40
你基本上是在尋找像麪包屑一樣的東西嗎?您可以使用該遞歸函數:
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] =>
)
)
我會說這是一個比較難看的導航實施。隨着它變得越來越大,它將越來越難保持。你可能想以某種方式重寫這個。 – 2010-11-10 15:38:24
@ Silverlight:這樣做的原因是爲了避免爲每個父母進行多個查詢。最終,這是構建導航最快,最乾淨的方式,無需擔心網頁製作40多個查詢。如果你知道更好的東西,你可以自由告訴我。 – RJD22 2010-11-10 15:42:57