3v4l.org

run code in 300+ PHP versions simultaneously
<?php $array = [ "# Grandparent #1", "# Grandparent #2", "## Parent #2-1", "### Child #2-1-1", "## Parent #2-2", "### Child #2-2-1", "### Child #2-2-2", "## Parent #2-3", "## Parent #2-4", "# Grandparent #3", "## Parent #3-1", ]; function recurse(array $lines, int $level = 1): array { $tree = []; $directDescendants = []; foreach($lines as $line) { [$hashes, $name] = explode(' ', $line, 2); $depth = strlen($hashes); if ($depth === $level) { if ($directDescendants) { $parent['children'] = recurse($directDescendants, $level + 1); } $directDescendants = []; // reset collection of direct descendants unset($parent); // destroy reference $parent = ['name' => $name]; // name the member $tree[] = &$parent; // push the reference variable into the tree } elseif ($depth > $level) { $directDescendants[] = $line; // collect only direct descendants of current level parent member } } if ($directDescendants) { $parent['children'] = recurse($directDescendants, $level + 1); } return $tree; } var_export(recurse($array));
Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.28, 8.4.1 - 8.4.14, 8.5.0 - 8.5.1
array ( 0 => array ( 'name' => 'Grandparent #1', ), 1 => array ( 'name' => 'Grandparent #2', 'children' => array ( 0 => array ( 'name' => 'Parent #2-1', 'children' => array ( 0 => array ( 'name' => 'Child #2-1-1', ), ), ), 1 => array ( 'name' => 'Parent #2-2', 'children' => array ( 0 => array ( 'name' => 'Child #2-2-1', ), 1 => array ( 'name' => 'Child #2-2-2', ), ), ), 2 => array ( 'name' => 'Parent #2-3', ), 3 => array ( 'name' => 'Parent #2-4', ), ), ), 2 => array ( 'name' => 'Grandparent #3', 'children' => array ( 0 => array ( 'name' => 'Parent #3-1', ), ), ), )
Output for 8.4.15
/bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15)
Process exited with code 1.

preferences:
197.12 ms | 408 KiB | 5 Q