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

Приветствую!
Имеется массив
$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'] => 'Категория',
        ),
...
);

  • Вопрос задан
  • 117 просмотров
Решения вопроса 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
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
mosdata Москва
от 50 000 до 100 000 руб.
Zaymigo Нижний Новгород
от 20 000 до 100 000 руб.