P
P
Pavel Gogolinsky2015-11-06 15:51:42
PHP
Pavel Gogolinsky, 2015-11-06 15:51:42

How to convert a one-dimensional array of book categories into a multi-dimensional array?

There is an array with categories of books of the following format

[
[code => 22, name => Учебная литература, parent => 2, level => 2],
[code => 200, name => Учебники, р/т, учебные пособия, parent => 22, level => 3],
]

How can you bypass what would result in a new multidimensional associative array of the following form?
[
[22 => [
    name => Учебная литература,
    items => [
        200 => [name => Учебники, р/т, учебные пособия, items => []]
    ],
],

Answer the question

In order to leave comments, you need to log in

1 answer(s)
I
inDeepCode, 2015-11-07
@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); //смотрим результат

?>

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question