3v4l.org

run code in 300+ PHP versions simultaneously
<?php $indexes = [ 26 => ["namespace" => "X\\Y\\Zed"], 9 => ["namespace" => "A\\B\\See"], 3 => ["namespace" => "A\\B\\Bee"], 38 => ["namespace" => "A\\B\\C\\Dee"], 51 => ["namespace" => "X\\Wye"], 16 => ["namespace" => "A\\Sea"], 12 => ["namespace" => "A\\Bees"], 31 => ["namespace" => "M"] ]; function foldersBeforeFiles($indexes){ $hierarchical_data = createHierarchicalStructure($indexes); fileSystemSorting($hierarchical_data); return associateKeys(flattenFileSystemResults($hierarchical_data),$indexes); } function associateKeys($data,$indexes){ $map = array_combine(array_column($indexes,'namespace'),array_keys($indexes)); $result = []; foreach($data as $val){ $result[ $map[$val] ] = ['namespace' => $val]; } return $result; } function flattenFileSystemResults($hierarchical_data){ $result = []; foreach($hierarchical_data as $key => $value){ if(count($value) > 0){ $sub_result = flattenFileSystemResults($value); foreach($sub_result as $r){ $result[] = $key . "\\" . $r; } }else{ $result[] = $key; } } return $result; } function fileSystemSorting(&$indexes){ foreach($indexes as $key => &$value){ fileSystemSorting($value); } uksort($indexes,function($key1,$key2) use ($indexes){ if(count($indexes[$key1]) == 0 && count($indexes[$key2]) > 0) return 1; if(count($indexes[$key2]) == 0 && count($indexes[$key1]) > 0) return -1; return strnatcmp($key1,$key2); }); } function createHierarchicalStructure($indexes){ $data = []; foreach($indexes as $d){ $temp = &$data; foreach(explode("\\",$d['namespace']) as $namespace){ if(!isset($temp[$namespace])){ $temp[$namespace] = []; } $temp = &$temp[$namespace]; } } return $data; } print_r(foldersBeforeFiles($indexes));
Output for git.master, git.master_jit, rfc.property-hooks
Array ( [38] => Array ( [namespace] => A\B\C\Dee ) [3] => Array ( [namespace] => A\B\Bee ) [9] => Array ( [namespace] => A\B\See ) [12] => Array ( [namespace] => A\Bees ) [16] => Array ( [namespace] => A\Sea ) [26] => Array ( [namespace] => X\Y\Zed ) [51] => Array ( [namespace] => X\Wye ) [31] => Array ( [namespace] => M ) )

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
137.7 ms | 407 KiB | 5 Q