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

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

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