Нужна помощь для организации массива

ugamer

Постоялец
Регистрация
30 Ноя 2009
Сообщения
113
Реакции
23
Добрый день, прошу помочь начинающему программисту. Вопрос думаю простой, но я не понимаю как сделать, т.е. даже логику не могу придумать как правильно организовать массив. Спасибо, если не трудно решение с разъяснением.

Нужно сделать, чтобы выводилось:

Категория
  • Материал
  • Материал
  • Материал
Категория
  • Материал
  • Материал
  • Материал

А сейчас выводится:
  • Категория
  • Материал
  • Категория
  • Материал
Вот сам код:
Код:
<?php foreach ( $list as $item ) { ?>

<div class="toggler-cat">
<?php echo $item->category_title; ?>
</div>

<div class="toggler-item">
<?php echo $item->title; ?>
</div>
<?php } ?>
 
для такого удобнее использовать вложенные массивы, в этом случае есть четкая привязка дочерних элементов к родительским.
вот обобщенный пример:
Код:
<?php

$list = array(
    "категория 1" => array(
        "материал", "материал", "материал"
    ),
    "категория 2" => array(
        "материал", "материал"
    ),
);

?>

<?php foreach ( $list as $category => $items ) { ?>

<div class="toggler-cat">
<?php echo $category; ?>
</div>
    <?php foreach ( $items as $item ) { ?>
        <div class="toggler-item">
        <?php echo $item; ?>
        </div>
    <?php } ?>       
<?php } ?>

выведет

категория 1
-материал
-материал
-материал
категория 2
-материал
-материал

здесь организован массив категорий, ключ это категория, значение - массив дочерних элементов.
в первом цикле проходим по верхнему уровню - категориям, выводим категорию и во втором вложенном цикле
проходим по принадлежащим ей дочерним элементам.
если нужно больше данных для каждой из сущностей массив будет сложнее, например
Код:
<?php

$list = array(
    array(
        'title' => "категория 1" ,
        'image' => 'image.jpg',
        'items' => array(
            "материал", "материал", "материал"
        )
    ),
    array(
        'title' => "категория 2" ,
        'image' => 'image.jpg',
        'items' => array(
            "материал", "материал"
        )
    )
);
?>

<?php foreach ( $list as $category) { ?>

<div class="toggler-cat">
<?php echo $category['title']; ?>
</div>
    <?php foreach ( $category['items'] as $item ) { ?>
        <div class="toggler-item">
        <?php echo $item; ?>
        </div>
    <?php } ?>      
<?php } ?>
 
спасибо за ответ! логику понял, это если массив организован по родительский -> дочерний

а у меня получается
Код:
<?php
Array ( [0] => stdClass Object ( [id] => 1259 [title] =>заголовок материала [category_title] =>заголовок категории1 [category_route] => kat/kat1 )
[1] => stdClass Object ( [id] => 1252 [title] => заголовок материала [alias] => v2 [category_title =>заголовок категории2 category_route] => kat/kat2
[2] => stdClass Object ( [id] => 1252 [title] => заголовок материала [alias] => v2 [category_title =>заголовок категории21 category_route] => kat/kat1
?>
т.е. мне надо
заголовок категории1
  • заголовок материала категории1
  • заголовок материала категории1
заголовок категории2
  • заголовок материала категории2
  • заголовок материала категории2
 
Последнее редактирование:
Мои мысли: надо как то связать категорию и материалы принадлежащие ей, а вот как ума не приложу. Никаких переменных значений в массиве не нашел связанных.
 
Назад
Сверху