3v4l.org

run code in 300+ PHP versions simultaneously
<?php $arr = [ 5 => [ "data_id" => "5", "data_parent" => "4", "data_level" => " ", "data_prefix" => " ", "data_title" => "Assets", "data_link" => "0", ], 57 => [ "data_id" => "57", "data_parent" => "5", "data_level" => " ", "data_prefix" => " ", "data_title" => "Fixed Assets", "data_link" => "0", ], 52 => [ "data_id" => "52", "data_parent" => "5", "data_level" => " ", "data_prefix" => " ", "data_title" => "Asset Two", "data_link" => "1", ], 51 => [ "data_id" => "51", "data_parent" => "5", "data_level" => " ", "data_prefix" => " ", "data_title" => "Assset ONE", "data_link" => "1", ], 48 => [ "data_id" => "48", "data_parent" => "4", "data_level" => " ", "data_prefix" => " ", "data_title" => "Expenses", "data_link" => "0", ], 50 => [ "data_id" => "50", "data_parent" => "48", "data_level" => " ", "data_prefix" => " ", "data_title" => "Expense One", "data_link" => "1", ], 49 => [ "data_id" => "49", "data_parent" => "48", "data_level" => " ", "data_prefix" => " ", "data_title" => "Expense One", "data_link" => "1", ], 58 => [ "data_id" => "58", "data_parent" => "57", "data_level" => " ", "data_prefix" => " ", "data_title" => "Vehicles", "data_link" => "1", ], ]; function buildTree(array $elements, $options = [ 'parent_id_column_name' => 'parent_id', 'children_key_name' => 'children', 'id_column_name' => 'id', ], $parentId = 0) { $branch = []; foreach ($elements as $element) { if ($element[$options['parent_id_column_name']] == $parentId) { $children = buildTree($elements, $options, $element[$options['id_column_name']]); if ($children) { $element[$options['children_key_name']] = $children; } $branch[] = $element; } } return $branch; } // 4 as first parent is $temp = buildTree($arr, [ 'parent_id_column_name' => 'data_parent', 'children_key_name' => 'children', 'id_column_name' => 'data_id'], 4); function printTree($tree) { if (!is_null($tree) && count($tree) > 0) { echo '<ul>'; foreach ($tree as $node) { // you can use whole $node here including all values of each node echo '<li>' . $node['data_title']; if (!empty($node['children'])) { printTree($node['children']); } echo '</li>'; } echo '</ul>'; } } printTree($temp);
Output for 7.1.0 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.7
<ul><li>Assets<ul><li>Fixed Assets<ul><li>Vehicles</li></ul></li><li>Asset Two</li><li>Assset ONE</li></ul></li><li>Expenses<ul><li>Expense One</li><li>Expense One</li></ul></li></ul>

preferences:
176.02 ms | 403 KiB | 227 Q