【问题标题】:How to print out Multi-Dimensional Arrays in php如何在php中打印出多维数组
【发布时间】: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_idorder 列或将其构建为 MPTT 以便您可以处理嵌套和级别。

标签: php html multidimensional-array foreach


【解决方案1】:

您当前的代码即将运行。此行将始终产生 1 的计数。

$count = count($value);

我相信,您在那里寻找的是:

$count = count($return[$key]);

【讨论】:

  • 产生了你想要的结果吗?
  • 没有。我怀疑第一个foreach() 循环自定义了数组,其他列的其余数据不包括在内。我只从 titlecategory 列中获得结果。我认为第一个循环应该以不同的方式进行定制,将title 列分组并转发所有其他信息。如果我有,也许我可以为每个页面分配来自item 数据的 URL。
【解决方案2】:

我找到了另一种方法,它比我尝试做的方法要好得多。这解决了我的情况。

http://wizardinternetsolutions.com/articles/web-programming/single-query-dynamic-multi-level-menu

感谢您的支持!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多