Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php HTML列表的嵌套数组_Php_Html_Arrays - Fatal编程技术网

Php HTML列表的嵌套数组

Php HTML列表的嵌套数组,php,html,arrays,Php,Html,Arrays,我有以下数组: Array ( [0] => Array ( [ID] => 1 [PARENT] => 0 [NAME] => Your first category ) [1] => Array ( [ID] => 2 [PARENT] => 1

我有以下数组:

Array
(
    [0] => Array
        (
            [ID] => 1
            [PARENT] => 0
            [NAME] => Your first category
        )
    [1] => Array
        (
            [ID] => 2
            [PARENT] => 1
            [NAME] => Your first forum
        )
    [2] => Array
        (
            [ID] => 4
            [PARENT] => 1
            [NAME] => Another Forum
        )
    [3] => Array
        (
            [ID] => 5
            [PARENT] => 1
            [NAME] => Good Forum
        )
    [4] => Array
        (
            [ID] => 6
            [PARENT] => 0
            [NAME] => Top Forum
        )
    [5] => Array
        (
            [ID] => 7
            [PARENT] => 6
            [NAME] => Sub Forum #1
        )
    [6] => Array
        (
            [ID] => 9
            [PARENT] => 7
            [NAME] => Sub Forum #1-1
        )
    [7] => Array
        (
            [ID] => 10
            [PARENT] => 7
            [NAME] => Sub Forum #1-2
        )
    [8] => Array
        (
            [ID] => 8
            [PARENT] => 6
            [NAME] => Sub Forum #2
        )
)
好的,我这里有要求的var_导出结果:

array (
  0 => 
  array (
    'ID' => '1',
    'PARENT' => '0',
    'NAME' => 'Your first category',
  ),
  1 => 
  array (
    'ID' => '2',
    'PARENT' => '1',
    'NAME' => 'Your first forum',
  ),
  2 => 
  array (
    'ID' => '4',
    'PARENT' => '1',
    'NAME' => 'Another Forum',
  ),
  3 => 
  array (
    'ID' => '5',
    'PARENT' => '1',
    'NAME' => 'Good Forum',
  ),
  4 => 
  array (
    'ID' => '6',
    'PARENT' => '0',
    'NAME' => 'Top Forum',
  ),
  5 => 
  array (
    'ID' => '7',
    'PARENT' => '6',
    'NAME' => 'Sub Forum #1',
  ),
  6 => 
  array (
    'ID' => '9',
    'PARENT' => '7',
    'NAME' => 'Sub Forum #1-1',
  ),
  7 => 
  array (
    'ID' => '10',
    'PARENT' => '7',
    'NAME' => 'Sub Forum #1-2',
  ),
  8 => 
  array (
    'ID' => '8',
    'PARENT' => '6',
    'NAME' => 'Sub Forum #2',
  ),
)
其中一些数组父值与另一个数组ID值共同响应。这有助于我使它们嵌套。但问题是:如何创建一个如下所示的HTML列表:

<ul>
    <li id="1">
        Your First Category
        <ul>
            <li id="2">
                Your First Forum
            </li>
            <li id="4">
                Another Forum
            </li>
            <li id="5">
                Good Forum
            </li>
        <ul>
    </li>
    <li id="6">
        Top Forum
        <ul>
            <li id="7">
                Sub Forum #1
                <ul>
                    <li id="9">
                        Sub Forum #1-1
                    </li>
                    <li id="10">
                        Sub Forum #1-2
                    </li>
                </ul>
            </li>
            <li id="7">
                Sub Forum #2
            </li>
        <ul>
    </li>
</ul>
  • 你的第一类
    • 你的第一个论坛
    • 另一个论坛
    • 好论坛
      • 顶级论坛
        • 分论坛#1
          • 分论坛#1-1
          • 分论坛#1-2
        • 分论坛#2
有什么想法吗?

我会怎么做:

  • 按父项id对菜单(?)项进行分组-
    $menu[$parentID]=数组($child,$child,…)
  • 使用递归函数为每个父级生成菜单-
    makeMenu($menu,$parentID)
  • 这将允许您访问每个节点两次—第一次是在对数组重新排序时,第二次是在打印节点时。因此,它可以很好地处理小型阵列和大型阵列

    资料来源:

    $data = array(
        0 => array(
            'ID'     => '1',
            'PARENT' => '0',
            'NAME'   => 'Your first category',
        ),
        1 => array(
            'ID'     => '2',
            'PARENT' => '1',
            'NAME'   => 'Your first forum',
        ),
        2 => array(
            'ID'     => '4',
            'PARENT' => '1',
            'NAME'   => 'Another Forum',
        ),
        3 => array(
            'ID'     => '5',
            'PARENT' => '1',
            'NAME'   => 'Good Forum',
        ),
        4 => array(
            'ID'     => '6',
            'PARENT' => '0',
            'NAME'   => 'Top Forum',
        ),
        5 => array(
            'ID'     => '7',
            'PARENT' => '6',
            'NAME'   => 'Sub Forum #1',
        ),
        6 => array(
            'ID'     => '9',
            'PARENT' => '7',
            'NAME'   => 'Sub Forum #1-1',
        ),
        7 => array(
            'ID'     => '10',
            'PARENT' => '7',
            'NAME'   => 'Sub Forum #1-2',
        ),
        8 => array(
            'ID'     => '8',
            'PARENT' => '6',
            'NAME'   => 'Sub Forum #2',
        ),
    );
    
    // reorder array
    $menu = array();
    foreach ( $data as $item ) {
        $menu[$item['PARENT']][] = $item;
    }
    
    // print menu
    function makeMenu($menu, $parentID) {
        $html = "<ul>";
        foreach ( $menu[$parentID] as $item ) {
            $html .= "<li id='{$item['ID']}'>{$item['NAME']}";
            if ( isset($menu[$item['ID']]) ) {
                $html .= makeMenu($menu, $item['ID']);
            }
            $html .= "</li>";
        }
        $html .= "</ul>";
        return $html;
    }
    echo makeMenu($menu, 0);
    
    $data=array(
    0=>数组(
    'ID'=>'1',
    “父项”=>“0”,
    “名称”=>“您的第一个类别”,
    ),
    1=>数组(
    'ID'=>'2',
    “父项”=>“1”,
    “名称”=>“您的第一个论坛”,
    ),
    2=>数组(
    'ID'=>'4',
    “父项”=>“1”,
    “名称”=>“另一个论坛”,
    ),
    3=>数组(
    'ID'=>'5',
    “父项”=>“1”,
    “名称”=>“好论坛”,
    ),
    4=>数组(
    'ID'=>'6',
    “父项”=>“0”,
    “名称”=>“顶级论坛”,
    ),
    5=>数组(
    'ID'=>'7',
    “父项”=>“6”,
    “名称”=>“分论坛#1”,
    ),
    6=>数组(
    'ID'=>'9',
    “父项”=>“7”,
    “名称”=>“分论坛#1-1”,
    ),
    7=>数组(
    'ID'=>'10',
    “父项”=>“7”,
    “名称”=>“分论坛#1-2”,
    ),
    8=>数组(
    'ID'=>'8',
    “父项”=>“6”,
    “名称”=>“分论坛#2”,
    ),
    );
    //重排序数组
    $menu=array();
    foreach($数据作为$项){
    $menu[$item['PARENT'][]=$item;
    }
    //打印菜单
    函数makeMenu($menu$parentID){
    $html=“
      ”; foreach($menu[$parentID]作为$item){ $html.=“{$item['NAME']}”; 如果(设置($menu[$item['ID']])){ $html.=makeMenu($menu,$item['ID']); } $html.=“”; } $html.=“
    ”; 返回$html; } echo Makeform($menu,0);
    输出(手动添加间距):

    • 你的第一类
      • 您的第一个论坛
      • 另一个论坛
      • 很好的论坛
    • 顶级论坛
      • 分论坛#1
        • 分论坛#1-1
        • 分论坛#1-2
      • 分论坛2
    现在您有了一个正确的数组结构

    但你可能必须把它翻过来,因为它是由孩子们组成的。但您的输出是由家长提供的

    因此,与我发布的第二个foreach不同,请执行以下操作:

    foreach($new_arr as $id => $data) $new_arr[$data['parent']]['children'][] =& $data;
    

    如果您提供的是输出
    var\u export()
    ,而不是
    print\u r()
    ,那么就容易多了。在将数组转换为HTML列表之前,我宁愿将其转换为正确的嵌套形式。这就是我需要的!更改数组形式,以便在以后的操作中满足HTML布局。我只是显示HTML以显示所需数组的形式,而不是让php对数组进行编号,而是使用ID列作为数组键。然后获取父级是一个简单的数组查找。你必须注意一个递归数组,其中父数组的父数组是子数组。你能告诉我你的确切意思吗?这看起来是个好主意,但我一点也不明白!:?谢谢你的片段!我现在就试试,我会在这里回答结果!:)@梅里亚诺斯,你只需要一个级别的孩子吗?不,我需要多个级别。我喜欢做的是从phpBB中检索所有类别和论坛作为嵌套列表。你现在可以在这里看到我的下一个问题,我有一个打字错误。我写了
    &
    而不是
    =&
    $new_arr = array();
    foreach($arr as $data) $new_arr[$data['id']] = $data;
    
    foreach($new_arr as $id => &$data) $data['parent'] =& $new_arr[$data['parent']];
    
    foreach($new_arr as $id => $data) $new_arr[$data['parent']]['children'][] =& $data;