I am trying to work with a database containing category information. The relation between the items is only present in form of a parent_id. I know I could do some "workarounds" to reach the goal, but there has to be a better solution. I could write some more info into the database, like deepness, but I am sure there is a loop/array_filter combination I am not aware about.
This is what I have:
Array
(
[0] => Array
(
[id] => 0
[parent_id] => 0
[title] => All
)
[1] => Array
(
[id] => 23
[parent_id] => 0
[title] => Nature
)
[2] => Array
(
[id] => 3
[parent_id] => 4
[title] => Thriller
)
[3] => Array
(
[id] => 4
[parent_id] => 0
[title] => Drama
)
[4] => Array
(
[id] => 1
[parent_id] => 0
[title] => Crime
)
[5] => Array
(
[id] => 19
[parent_id] => 23
[title] => Documentation
)
[6] => Array
(
[id] => 20
[parent_id] => 23
[title] => Coverage
)
[7] => Array
(
[id] => 21
[parent_id] => 19
[title] => Isles
)
This is what I want:
Array
(
[0] => Array
(
[id] => 0
[parent_id] => 0
[title] => All
[0] => Array
(
[id] => 23
[parent_id] => 0
[title] => Nature
[0] => Array
(
[id] => 19
[parent_id] => 23
[title] => Documentation
[0] => Array
(
[id] => 21
[parent_id] => 19
[title] => Isles
)
)
[1] => Array
(
[id] => 20
[parent_id] => 23
[title] => Coverages
)
)
[1] => Array
(
[id] => 4
[parent_id] => 0
[title] => Drama
[0] => Array
(
[id] => 3
[parent_id] => 4
[title] => Thriller
)
)
[2] => Array
(
[id] => 1
[parent_id] => 0
[title] => Crime
)
)
I tried it with loops and array_filter() but it was not working. I tried it with a loop within a function and calling the function within the same loop, but it didn´t work. Then I started trying it with only 1 subcategory, but this can´t be a solution nor a workaround.
$categories = [see first code block]
$i = -1;
$j = -1;
foreach ($categories as $cat) {
$i++;
if ($cat['parent_id'] > 0) {
$j = -1;
foreach ($categories as $cat2) {
$j++;
if ($cat2['id'] == $cat['parent_id']) {
$categories[$j][] = array("id" => $cat['id'], "parent_id" => $cat['parent_id'], "title" => $cat['title']);
unset($categories[$i]);
continue 2;
}
}
}
}
I would be happy for every push in the right direction. Thanks!