Таблица вложенных категорий HTML - PullRequest
0 голосов
/ 28 февраля 2020

Короткая история. Я хочу создать таблицу с 3 уровнями категории: категория, подкатегория, подкатегория. Это вывод из базы данных, мне нужно только реализовать на php / html часть со следующим:

 Array
    (
        [1] => Array
            (
                [category_id] => 2
                [0] => 2
                [category_name] => Tutorials
                [1] => Tutorials
                [category_link] => #
                [2] => #
                [parent_id] => 0
                [3] => 0
                [sort_order] => 1
                [4] => 1
                [subcategories] => Array
                    (
                        [0] => Array
                            (
                                [category_id] => 3
                                [0] => 3
                                [category_name] => Java
                                [1] => Java
                                [category_link] => java
                                [2] => java
                                [parent_id] => 2
                                [3] => 2
                                [sort_order] => 1
                                [4] => 1
                                [subcategories] => Array
                                    (
                                        [0] => Array
                                            (
                                                [category_id] => 18
                                                [0] => 18
                                                [category_name] => Jquery Tut
                                                [1] => Jquery Tut
                                                [category_link] => jquerytut
                                                [2] => jquerytut
                                                [parent_id] => 3
                                                [3] => 3
                                                [sort_order] => 3
                                                [4] => 3
                                                [subcategories] => Array
                                                    (
                                                    )

                                            )

                                    )

                            )

                    )

            )

        [2] => Array
            (
                [category_id] => 5
                [0] => 5
                [category_name] => Frameworks
                [1] => Frameworks
                [category_link] => #
                [2] => #
                [parent_id] => 0
                [3] => 0
                [sort_order] => 2
                [4] => 2
                [subcategories] => Array
                    (
                        [0] => Array
                            (
                                [category_id] => 9
                                [0] => 9
                                [category_name] => Hibernate
                                [1] => Hibernate
                                [category_link] => hibernate
                                [2] => hibernate
                                [parent_id] => 5
                                [3] => 5
                                [sort_order] => 2
                                [4] => 2
                                [subcategories] => Array
                                    (
                                    )

                            )

                    )

            )


        [4] => Array
            (
                [category_id] => 13
                [0] => 13
                [category_name] => Contact
                [1] => Contact
                [category_link] => contact
                [2] => contact
                [parent_id] => 0
                [3] => 0
                [sort_order] => 4
                [4] => 4
                [subcategories] => Array
                    (
                    )

            )

    )

Примерно так:

|CategoryName           | Link | more |
|-- SubcategoryName     | Link | more |
|--- SubSubcategoryName | Link | more |

et c

Я боролся с этим уже несколько часов и, похоже, я не могу этого сделать.

Я пытался что-то, но получился вывод

Код:

foreach ($category as $array => $innerArray):
     $table .= "<tr><td>".$innerArray['category_name']; 
        foreach ($innerArray['subcategories'] as $subc => $subc_array):
           $table .= $subc_array['category_name'];
        endforeach;
     $table .= "</td></tr>";
endforeach;
echo $table;

1 Ответ

1 голос
/ 28 февраля 2020

Хорошим решением будет рекурсивная функция. Например:

echo "<table>".get_rows($category, 0)."</table>";

function get_rows($arr, $lvl){
    $html = '';
    foreach ($arr as $array => $innerArray){
        $html .=  '<tr><td style="padding-left:'.($lvl*30).'px;">'.$innerArray['category_name'].'</td>';
        $html .=  '<td>'.$innerArray['category_link'].'</td></tr>';
        if(isset($innerArray['subcategories'])){
            $html .= get_rows($innerArray['subcategories'], $lvl+1);
        }

    }
    return $html;
}

Выход:

cat1            clink
  cat11         clink
  cat12         clink
cat2            clink
  cat21         clink
    cat211      clink
    cat212      clink
      cat2121   clink
  cat22         clink
cat3            clink
  cat31         clink
  cat32         clink

Это вход, который я использовал:

$category = [
    [
        "category_name"=>"cat1",
        "category_link"=>"c1link",
        "subcategories"=> [
                [
                    "category_name"=>"cat11",
                    "category_link"=>"c1link",
                    "subcategories"=>[]
                ],
                [
                    "category_name"=>"cat12",
                    "category_link"=>"c1link",
                    "subcategories"=>[]
                ]
            ],

        ],
        [
            "category_name"=>"cat2",
            "category_link"=>"c1link",
            "subcategories"=> [
                [
                    "category_name"=>"cat21",
                    "category_link"=>"c1link",
                    "subcategories"=>[[
                        "category_name"=>"cat211",
                        "category_link"=>"c1link",
                        "subcategories"=>[]
                    ],
                    [
                        "category_name"=>"cat212",
                        "category_link"=>"c1link",
                        "subcategories"=>[[
                            "category_name"=>"cat2121",
                            "category_link"=>"c1link",
                            "subcategories"=>[]
                        ]]
                    ]]
                ],
                [
                    "category_name"=>"cat22",
                    "category_link"=>"c1link",
                    "subcategories"=>[]
                ]
            ]

        ],
        [
            "category_name"=>"cat3",
            "category_link"=>"c1link",
            "subcategories"=> [
                [
                    "category_name"=>"cat31",
                    "category_link"=>"c1link",
                    "subcategories"=>[]
                ],
                [
                    "category_name"=>"cat32",
                    "category_link"=>"c1link",
                    "subcategories"=>[]
                ]
            ]

        ]
];
...