Skip to content

Instantly share code, notes, and snippets.

@zaynali53
Last active August 1, 2021 07:17
Show Gist options
  • Select an option

  • Save zaynali53/0263ee664eda3cdab8c915ed24f074e1 to your computer and use it in GitHub Desktop.

Select an option

Save zaynali53/0263ee664eda3cdab8c915ed24f074e1 to your computer and use it in GitHub Desktop.
Flat array to Multi-level Tree
<?php
$data = [
[
'id' => 1,
'name' => 'A',
'parent_id' => null,
],
[
'id' => 2,
'name' => 'B',
'parent_id' => 1,
],
[
'id' => 3,
'name' => 'C',
'parent_id' => 1,
],
[
'id' => 4,
'name' => 'D',
'parent_id' => 2,
],
[
'id' => 5,
'name' => 'E',
'parent_id' => 2,
],
[
'id' => 6,
'name' => 'F',
'parent_id' => 4,
],
[
'id' => 7,
'name' => 'G',
'parent_id' => 4,
],
[
'id' => 8,
'name' => 'H',
'parent_id' => null,
],
[
'id' => 9,
'name' => 'I',
'parent_id' => 8,
],
[
'id' => 10,
'name' => 'J',
'parent_id' => 9,
],
];
function buildTree( array $elements, $parent_id = null, $id_key = 'id', $parent_key = 'parent_id', $children_key = 'children' )
{
$branch = [];
foreach ( $elements as $element )
{
if ( $element[ $parent_key ] === $parent_id )
{
$children = buildTree( $elements, $element[ $id_key ], $id_key, $parent_key, $children_key );
if ( ! empty( $children ) ) {
$element[ $children_key ] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
var_dump( buildTree( $data ) );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment