I have an external API that returns a category list:
Current array:
id | parent | name
3 | 6 | Sub
6 | 9 | Test
9 | 0 | Parent 1
2 | 0 | Parent 2
Need to be:
id | parent | name
9 | 0 | Parent 1
2 | 0 | Parent 2
6 | 9 | Test
3 | 6 | Sub
Now I will convert this list in the right order, (from parent to childs), so I can simple foreach this new array and insert it in my database (with my custom parent_id).
I have created a function, but this works not good:
// DOES NOT WORK!!
function sortArrayFromParentToChilds($array)
{
$output = [];
foreach ($array as $key => $a) {
// search in new array
if (empty($output)) {
$output[] = $a;
unset($array[$key]);
} else {
if (findSubCategory($a, $output)) {
array_push($output, $a);
} else {
array_unshift($output, $a);
}
unset($array[$key]);
}
}
return $output;
}
function findSubCategory($id, $output)
{
foreach ($output as $o) {
if ($o['parent'] == $id) {
return true;
}
}
return false;
}
$result = sortArrayFromParentToChilds($initial);
Who can help me to get this function working?
Updated: added some sample data:
$initial = array(
array(
'name' => 'Paul',
'id' => 4,
'parent' => 2
),
array(
'name' => 'Liz',
'id' => 5,
'parent' => 2
),
array(
'name' => 'Comus',
'id' => 6,
'parent' => 3
),
array(
'name' => 'Mai',
'id' => 7,
'parent' => 2
),
array(
'name' => 'Titus',
'id' => 8,
'parent' => 3
),
array(
'name' => 'Adult',
'id' => 9,
'parent' => 6
),
array(
'name' => 'People',
'id' => 2,
'parent' => 0
),
array(
'name' => 'Puppy',
'id' => 10,
'parent' => 8
),
array(
'name' => 'Programmers',
'id' => 11,
'parent' => 4
),
);
ORDER BYvar_export, please?