Как показать бесконечные подкатегории в Codeigniter?

1

Мой код

<?php foreach ($categories as $category):?>
     <tr>
         <td><?php echo $category['name'];?></td>
     </tr>
     <?php if(isset($category['sub_categories'])):?>

     <?php foreach($category['sub_categories'] as $subcategory):?>
        <tr>
          <td style="margin-left:50px;padding-left:50px;"><span><?php echo $subcategory['name'];?></span></td>
        </tr>
    <?php endforeach;?>
    <?php endif;?>

<?php endforeach;?>

Проблема в том, что она показывает только подкатегории уровня. Как я показываю бесконечные вложенные категории

Теги:
codeigniter

2 ответа

2
Лучший ответ

Добро пожаловать в чудесный мир рекурсии !

См. Также Что такое рекурсия и когда я должен ее использовать?

Вам нужна функция, которая может называть себя подмножеством или уточненным набором переменных. Это звучит сложнее, чем есть на самом деле. Вам нужно вызывать одну и ту же функцию несколько раз и использовать ее возвращаемый вывод как переменную внутри себя.

<?php

# Recursive function to show each category and sub-categories
function showCategory( $category, $offset = 0 ) {
    $html = '';

    # Open the column
    if ( $offset > 0 ) {
        $html .= '<td style="margin-left: ' . $offset . 'px; padding-left: ' . $offset . 'px;">';
        $html .= '<span>';
    } else {
        $html .= '<td>';
    }

    $html .= $category['name'];

    if ( isset( $category['sub_categories'] ) ) {
        foreach ( $category['sub_categories'] as $sub_category ) {
            # Wrap table around the results
            $html .= '<table>';

            # Add 50 pixels to each recursion - call this function with sub_category as parameter
            $html .= showCategory( $sub_category, $offset + 50 );
            $html .= '</table>';
        }
    }

    if ( $offset > 0 ) {
        $html .= '</span>';
    }

    # Close the column
    $html .= '</td>';

    # Return the row
    return '<tr>' . $html . '</tr>';
}

# Test data:
$categories = [
    [
        'name'           => 'foo',
        'sub_categories' => [
            ['name' => 'sub1'],
            [
                'name'           => 'sub2',
                'sub_categories' => [
                        ['name' => 'subsub1'],
                        ['name' => 'subsub2']
                ]
            ]
        ]
    ]
];

# This is where we show stuff
foreach ( $categories as $category ) {
    echo showCategory( $category );
}
0
$category['sub_categories']

сделайте эту подкатегорию как ассоциативный массив, чтобы вы могли применять для каждого цикла в этом массиве, должны быть такими, как это

$categoryArr=array(
         'name'=>'category name',
         'subcategory'=>array(
               array(
                  'name'=>'subcategory name',
                  'details'=>'enter details here'
               ),
               array(
                  'name'=>'subcategory2 name',
                  'details'=>'enter details here'
               )
               ..... so on
          )
         )
  • 0
    Я не могу понять, как сделать петлю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню