Как перевести одномерный массив категорий книг в многомерный массив?

Есть массив с категориями книг следующего формата
[
[code => 22, name => Учебная литература, parent => 2, level => 2],
[code => 200, name => Учебники, р/т, учебные пособия, parent => 22, level => 3],
]

Каким образом можно обойти, что бы в результате получился новый многомерный ассоциативный массив следующего вида?
[
[22 => [
    name => Учебная литература,
    items => [
        200 => [name => Учебники, р/т, учебные пособия, items => []]
    ],
],
  • Вопрос задан
  • 153 просмотра
Пригласить эксперта
Ответы на вопрос 1
@inDeepCode
<?php

//в ПХП ваш массив будет выглядеть приблизительно так
$sourceArray = array(
    0 => array(
        'code' => 22, 
        'name' => 'Учебная литература', 
        'parent' => 2, 
        'level' => 2
    ),
    1 => array(
        'code' => 200, 
        'name' => 'Учебники, р/т, учебные пособия', 
        'parent' => 22, 
        'level' => 3
    )
);

/*
    как-то так мы создаем массив категорий вида:
    22 => array(
        'name' => 'Учебная литература',
    )
*/
function makeCategoryArray($sourceArray) 
{
    $catArray = array();
    
    foreach($sourceArray as $key=>$value){
        if(isset($value)){
            $catArray[$sourceArray[$key]['parent']] = array('name', $sourceArray[$key]['name']);
        }
    }
    
    return $catArray;
}


/*
    как-то так мы набиваем его айтемами соответствующей категории:
*/
function fillCategoryArray($catArray, $sourceArray)
{
    $finalArray = array();
    foreach($sourceArray as $key_source=>$value_source){
        foreach($catArray as $key_cat=>$value_cat)
            $catArray[$key_cat] = array('items',
                $finalArray[$sourceArray[$key_source]['code']] = array('name', $sourceArray[$key_source]['name'])
            );
    }
    
    return $finalArray;
}


//Создаем массив категорий:
$catArray = makeCategoryArray($sourceArray);

//набиваем
$finalArray = fillCategoryArray($catArray, $sourceArray);

print_r($finalArray); //смотрим результат

?>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы