我已经阅读了几个答案,但这对我没有意义。
这是顶级数组:
$menuData = array(
'items' => array(),
'parents' => array(),
'link' => array()
);
使用print_r
打印时,这是该数组。
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 4
)
[2] => Array
(
[0] => 3
)
[4] => Array
(
[0] => 5
)
[5] => Array
(
[0] => 6
[1] => 7
)
)
我正在试图弄清楚当我完成时我是如何知道的。
我试过了
end($menuData);
$last_id = key($menuData);
echo 'LAST ' . $last_id;
它回声“链接”。我明白那个。这是最后一项。但是如果我稍后改变呢?我不想像if ($last_id == 'link')
那样进行测试。这听起来不对。我不想做count++
,因为我不知道如何使用递归。
在使用递归时,如何判断我位于最外层数组的末尾,并且最外层数组的子项也是完整的?我需要知道整个数组何时处理完毕。
它似乎更难,因为它是一个关联数组。
我见过其他人:
Get key of the last element in an array
这不在**recursion**
的背景下。 array_walk_recursive
没有帮助。这里没有看到任何内容http://php.net/manual/en/ref.array.php。
不确定这个,php getting array levels in the recursion
编辑:
这是递归函数:
// menu builder function, parentId 0 is the root
// I just need to know when $menuData is complete done
// modified from some placy on the Internet I got this from
function buildMenu($parentId, $menuData, $first=true, $submenu=0)
{
$html = '';
if (isset($menuData['parents'][$parentId]))
{
if ($first)
{
$html = '<ul id="menu">';
}
foreach ($menuData['parents'][$parentId] as $itemId)
{
$menuId = $menuData['items'][$itemId]['menu_id'];
$menuName = $menuData['items'][$itemId]['menu_name'];
$menuDescription = $menuData['items'][$itemId]['menu_description'];
$menuLink = $menuData['items'][$itemId]['menu_link'];
$menuColumn = $menuData['items'][$itemId]['menu_column'];
$menuDropdown = $menuData['items'][$itemId]['menu_dropdown'];
if ($parentId == 0)
{
$html .= '<li><a href="' . $menuLink . '" class="drop">' . $menuName . '</a>';
$html .= '<div class="dropdown_' . $menuDropdown . 'column"><!-- Begin 1 columns container -->';
$html .= '<div class="col_' . $menuColumn . '">';
$html .= '<h2>';
$html .= ' no parent ';
$html .= '</h2></div></div>';
}
elseif ($submenu == $parentId)
{
$html .= '<div class="col_' . $menuData['items'][$itemId]['menu_column'] . '">';
$html .= '<h2>' . $menuData['items'][$itemId]['menu_name'] . ' SUB ' . '</h2>';
$html .= '</div>';
}
$previousMenuId = $menuId;
// find childitems recursively
$html .= buildMenu($itemId, $menuData, false, $previousMenuId);
$html .= '</li>';
}
// $html .= '</ul>';
}
return $html;
}
答案 0 :(得分:0)
简单版本:
$total = count($array);
foreach($array as $element) {
$visited++;
if ($visited == $total) {
.. at the last element
}
}