【发布时间】:2014-04-13 23:53:13
【问题描述】:
考虑数组是:
Array
(
[Page-1] => Array
(
[0] => Array
(
[0] => Cat-1
[1] => Item-1
)
)
[Page-2] => Array
(
[0] => Array
(
[0] => Cat-2
[1] => Item-2
)
[1] => Array
(
[0] => Cat-3
[1] => Item-3
)
[2] => Array
(
[0] => Cat-4
[1] => Item-4
)
)
[Page-3] => Array
(
[0] => Array
(
[0] => Cat-5
[1] => Item-5
)
)
[Page-4] => Array
(
[0] => Array
(
[0] => Cat-6
[1] => Item-6
)
)
[Page-5] => Array
(
[0] => Array
(
[0] => Cat-7
[1] => Item-7
)
[1] => Array
(
[0] => Cat-9
[1] => Item-9
)
)
[Page-6] => Array
(
[0] => Array
(
[0] => Cat-8
[1] => Item-8
)
)
)
其中,数组中的第一个键 [Page-x] 将是导航菜单中的 Main-Links。
有些主链接可能有子链接,有些没有。
子链接是第 3 个子数组的键 [0] 的值。
最后,每个链接的 URL 将是第三个子数组的键 [1] 的值。
只有具有多个类别的页面才会将其类别显示为子链接
我想要的导航栏:
1. <a href="Item-1">Page-1</a>
2. <a href="#">Page-2</a>
<a href="Item-2">Cat-2</a>
<a href="Item-3">Cat-3</a>
<a href="Item-4">Cat-4</a>
3. <a href="Item-5">Page-3</a>
4. <a href="Item-6">Page-4</a>
5. <a href="#">Page-5</a>
<a href="Item-7">Cat-7</a>
<a href="Item-9">Cat-9</a>
6. <a href="Item-8">Page-6</a>
PHP 代码
$records = $p->main_links();
foreach ($records as $key => $value) {
$return[$value['page']][] = array($value['child'], $value['item']);
}
foreach ($return as $key2 => $value2) {
$count = 0;
/* Select a specific value within the Array */
$main_links = $value2[$count][1]; /* URL of the main Pages */
$count = count($return[$key2]);
if($count > 1) {
foreach ($value2 as $key3 => $value3)
{
$link_name = $value3[0]; /* Child Link Names */
$link_url = $value3[1]; /* URL of Child Links */
/* addedd htmlspecialchars() function to $variables that will be echoed into HTML. It provides some XSS protection */
$cat_link .= '<li><a href="'.htmlspecialchars($filter1.$p->seoUrl($key2).$filter2.$p->seoUrl($link_url)).'">'.htmlspecialchars($link_name).'</a></li>';
}
$result .= '
<li '.htmlspecialchars($li_class).'><a href="#"><span>'.htmlspecialchars($key2).'</span></a>
<ul>
'.$cat_link.'
</ul>
</li>';
}else {
$result .= '
<li><a href="'.htmlspecialchars($filter1.$p->seoUrl($main_links)).'"><span>'.htmlspecialchars($key2).'</span></a></li>';
}
}
不幸的是我无法让它工作......输出不是我所期望的:(
当前输出(错误的一个):
1. <a href="Item-1">Page-1</a>
2. <a href="#">Page-2</a>
<a href="Item-2">Cat-2</a>
<a href="Item-3">Cat-3</a>
<a href="Item-4">Cat-4</a>
3. <a href="Item-5">Page-3</a>
4. <a href="Item-6">Page-4</a>
5. <a href="#">Page-5</a>
<a href="Item-2">Cat-2</a>
<a href="Item-3">Cat-3</a>
<a href="Item-4">Cat-4</a>
<a href="Item-7">Cat-7</a>
<a href="Item-9">Cat-9</a>
6. <a href="Item-8">Page-6</a>
任何帮助将不胜感激!
【问题讨论】:
-
小心...在 HTML 上下文中使用的任何变量数据周围使用
htmlspecialchars(),这样您就不会启用脚本注入和无效的 HTML。 -
是的,没错!谢谢你,布拉德,我会这样做的!
-
看来这个问题与PDO无关
-
当前结构的结果是什么。
-
我建议您添加
parent_id和order列或将其构建为 MPTT 以便您可以处理嵌套和级别。
标签: php html multidimensional-array foreach