Как перебрать один из массивов внутри трехмерного массива - PullRequest
0 голосов
/ 10 мая 2018

У меня есть массив $ data, который содержит около 50 значений, одно из которых - «категории». То, что я пытаюсь сделать, это добавить еще один массив «подкатегории» в массив «категории», который содержит категории, которые принадлежат каждой категории и на стороне html, распечатать список всех категорий и подкатегорий в каждой соответствующей категории. Немного застрял здесь.

инициализация массивов:

$data['categories'] = array();

    $results = $this->model_catalog_category->getCategories($category_id);

    foreach ($results as $result) {


        $filter_data = array(
            'filter_category_id'  => $result['category_id'],
            'filter_sub_category' => true
        );

        $data['categories'][] = array(
            'root_categories' => array (
                'category_id' => $result['category_id'],
                'name'  => $result['name'],
                'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
            ),
            'subcategories' => array(
                'sub_name' => $result['name'],
                'sub_href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
                ),
        );


    }
    foreach ($data['categories'] as $category) {
        $sub_results = $this->model_catalog_category->getCategories($category['root_categories']['category_id']);
        foreach ($sub_results as $sub_result){
            $category['subcategories'] = array (
                'sub_name'  => $sub_result['name'],
                'sub_href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $sub_result['category_id'] . $url),
            );
        }
    }

Доступ к массивам:

<div class="row">

  <?php if ($categories) { ?>
  <div class="row" style='margin-top: 13px; '>
    <div class="col-sm-3">
      <ul>

        <?php  foreach ($categories as $category) {  ?>
            <div class 'tests'>
            <li class='sidebar_form_item click_here_for_demo' style='padding: 5px; margin-bottom: 0px;'>
            <i class="fa fa-chevron-right" style='font-size: 12px; margin: 6px 7px 0px 7px; color: #696969; float: left;'></i>

            <div style='width: 250px; float: left;'><a href="<?php echo $category['root_categories']['href']; ?>" style='color: #696969; font-size: 12px;'><?php echo $category['root_categories']['name']; ?></a></div>
            <div class='clearfix'></div></li>

            <?php if($category['subcategories']) { ?>
                <?php foreach ($category['subcategories'] as $sub_category) { ?>

                    <li class='sidebar_form_item show_when_neded' style='display: none; padding: 5px 5px 5px 20px; margin-bottom: 0px;'>
                    <i class="fa fa-chevron-right" style='font-size: 12px; margin: 6px 7px 0px 7px; color: #696969; float: left;'></i>

                    <div style='width: 250px; float: left;'>
                    <a href="<?php echo $category[$sub_category]['sub_href']; ?>" style='color: #696969; font-size: 12px;'><?php echo $category[$sub_category]['sub_name']; ?></a></div>
                    <div class='clearfix'></div></li>

                <?php } ?>
            <?php } ?>
            </div>
        <?php } ?>


      </ul>
    </div>
  </div>
  <?php }?>

P.S. Веб-сайт Opencart, использующий Model-View-Controller

1 Ответ

0 голосов
/ 25 мая 2018

Краткий ответ: Вы пропускаете & до $ категории

Ваш код не будет создавать подкатегории под $data['categories'], вместо этого он создаст новый массив с именем $category['subcategories']

Вы можете использовать со следующим кодом:

 foreach ($data['categories'] as &$category) {
        $sub_results = $this->model_catalog_category->getCategories($category['root_categories']['category_id']);
        foreach ($sub_results as $sub_result){
            $category['subcategories'] = array (
                'sub_name'  => $sub_result['name'],
                'sub_href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $sub_result['category_id'] . $url),
            );
        }
    }

Это не создаст новый массив, скорее он будет ссылаться на $data['categories'] и добавит в него подкатегории, так что вы сможете получить к нему доступ в файле шаблона.

...