Как перебрать массив?

Приветствую!
Имеется массив
$data = array( 
       0 => array(
            ['id'] => 2,
            ['pagetitle'] => 'Главная',
            ['parent'] => 0
        ),
       1 => array(
            ['id'] => 3,
            ['pagetitle'] => 'Категория',
            ['parent'] => 2
        ),
       2 => array(
            ['id'] => 100,
            ['pagetitle'] => 'Подкатегория',
            ['parent'] => 5
        ),
);

Главная (id2)
 -- Категория (id3)
   -- Подкатегория (id5)
      -- Подкатегория (id100)
 -- Категория2 (id7)
    -- Подкатегория (id55)
...

Как получить данные родительской категории для всех подкатегорий? Т.е. в подкатегориях с id100 , id5 данные из категории id3. Вложенность подкатегорий дохододит до 5 уровней и может измениться.

Пытаюсь получить
$category = array(
       100 => array(  // id подкатегории
            ['parent'] => 3,  // id категории
            ['pagetitle'] => 'Категория',
        ),
       5 => array(  // id подкатегории
            ['parent'] => 3,  // id категории
            ['pagetitle'] => 'Категория',
        ,
);

Т.е. у всех подкатегорий категории (id3) должны быть ['parent'] => 3, ['pagetitle'] => 'Категория'. А у всех подкатегорий Категория2 (id7) ['parent'] => 7, ['pagetitle'] => 'Категория2'.
Попытался решить так
$category = array();

foreach ($data as $value) {
            if ( $value['parent'] != 2 ) {
                $parent = replaceParentCategory( $value, $data );
                $category[$value['id']]['pagetitle'] = $parent['pagetitle'];
                $category[$value['id']]['parent'] = $parent['id'];
            } else {
                $category[$value['id']]['pagetitle'] = $value['pagetitle'];
                $category[$value['id']]['parent'] = $value['parent'];
            }
}

function replaceParentCategory( $value, $data ){

        foreach ($data as $item) {

            if ( $value['parent'] == $item['id'] ){
                
                if ( $item['parent'] == 2 ) return $value;

                $value['parent'] = $item['parent'];
                $value['pagetitle'] = $item['pagetitle'];

                return replaceParentCategory( $value, $data );
            }

        }

    }

Но в результат
$category = array(
       100 => array(  // id подкатегории
            ['parent'] => 100,  // id категории
            ['pagetitle'] => 'Категория',
        ),
...
);

  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
Stimulate
@Stimulate
могу
Не очень понял вопрос, исходя из того, что хотите получить - вот код
$data = array( 
   0 => array(
        'id' => 2,
        'pagetitle' => 'Главная',
        'parent' => 0
    ),
   1 => array(
        'id' => 3,
        'pagetitle' => 'Категория',
        'parent' => 2
    ),
   2 => array(
        'id' => 100,
        'pagetitle' => 'Подкатегори 100',
        'parent' => 5
    ),
    3 => array(
        'id' => 5,
        'pagetitle' => 'Подкатегория 5 ',
        'parent' => 2
    )
);

$categories_array = array();

foreach ($data as $category) {
    if (!in_array($category['id'], $categories_array)) {
        $categories_array[$category['id']] = array();
        $categories_array[$category['id']]['pagetitle'] = $category['pagetitle'];
        $categories_array[$category['id']]['parent'] = $category['parent'];
    }
}

echo '<pre>';
    print_r($categories_array);
echo '</pre>';
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега PHP
Web developer
Как получить данные родительской категории для всех подкатегорий? Т.е. в подкатегориях с id100 , id5 данные из категории id3.

$data[$value['parent']]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы