Может ли кто-нибудь указать мне направление или помочь мне с желаемым результатом?По сути, $cats
происходит из цикла foreach
и может иметь любую длину, а иерархический уровень - это index
.
Actual Stored Data
------------------
$cats = [];
$cats[] = [
["cat1" => "Category Parent"],
["cat2" => "Category Child"],
["cat3" => "Category Child Child"]
];
$cats[] = [
["cat4" => "Different Category Parent"],
["cat5" => "Different Category Child"],
["cat6" => "Different Category Child"]
];
$cats[] = [
["cat1" => "Category Parent"],
["cat7" => "Different Again Category Child"],
["cat8" => "Category Child Different"]
];
Desired Output
------------------
$heirarchy = [
'Root' => [
'nodes' => [
[
'label' => 'Category Parent',
'id' => 'cat1',
'nodes' => [
[
'label' => 'Category Child',
'id' => 'cat2',
'nodes' => [
'label' => 'Category Child Child',
'id' => 'cat3'
]
],
[
'label' => 'Different Again Category Child',
'id' => 'cat7',
'nodes' => [
'label' => 'Category Child Different',
'id' => 'cat8'
]
],
]
],
[
'label' => 'Different Category Parent',
'id' => 'cat4',
'nodes' => [
'label' => 'Different Category Child',
'id' => 'cat5',
'nodes' => [
'label' => 'Different Category Child Child',
'id' => 'cat6'
],
],
]
]
]
];
Это то, что у меня есть, но я не учитывал добавление в массив, если он уже существует ($cats[0]
и $cats[2]
)
public function process_array(&$shifted,$first_element){
$key = key($first_element);
$return = [
'label' => $first_element[$key],
'id' => $key
];
if(count($shifted)){
$first = $shifted[0];
array_shift($shifted);
$return['nodes'] = $this->process_array($shifted,$first);
}
return $return;
}
$heirarchy = [
'Root' => [
'nodes' => []
]
];
foreach($cats as $cat){
if(is_array($cat)){
$first = $cat[0];
array_shift($cat);
$heirarchy['Root']['nodes'][] = $this->process_array($cat,$first);
}
}