3v4l.org

run code in 300+ PHP versions simultaneously
<?php $values=[ ["id"=> 0,"dn"=> "OU=Microsoft Exchange Security Groups,DC=local,DC=com"], ["id"=> 1,"dn"=> "OU=Domain Controllers,DC=local,DC=com"], ["id"=> 2,"dn"=> "OU=DIT,OU=DVIOU,DC=local,DC=com"], ["id"=> 3,"dn"=> "OU=Service Accounts,DC=local,DC=com"], ["id"=> 4,"dn"=> "OU=STT,OU=DIT,OU=DVIOU,DC=local,DC=com"], ["id"=> 5,"dn"=> "OU=STX,OU=DIT,OU=DVIOU,DC=local,DC=com"], ["id"=> 6,"dn"=> "OU=DVIOU,DC=local,DC=com"], ["id"=> 7,"dn"=> "OU=DPW,OU=DVIOU,DC=local,DC=com"], ["id"=> 8,"dn"=> "OU=STT,OU=DPW,OU=DVIOU,DC=local,DC=com"], ["id"=> 9,"dn"=> "OU=OLG,OU=DVIOU,DC=local,DC=com"], ["id"=> 10,"dn"=> "OU=DIT_Consultants,OU=DIT,OU=DVIOU,DC=local,DC=com"], ["id"=> 11,"dn"=> "OU=911,OU=DVIOU,DC=local,DC=com"], ["id"=> 12,"dn"=> "OU=Users,OU=911,OU=DVIOU,DC=local,DC=com"], ["id"=> 13,"dn"=> "OU=PERB,OU=DVIOU,DC=local,DC=com"], ["id"=> 14,"dn"=> "OU=STX,OU=PERB,OU=DVIOU,DC=local,DC=com"] ]; //Let's make dictionary foreach($values as $val){ //Find all OU preg_match_all('/OU=([^,]+)/',$val['dn'],$m); //print_r($m); $name=$m[1][0]; //Add elements to array $val=array_merge($val,[ 'name'=>$name, 'parent'=>0, //This will be done later 'level'=>count($m[1]), 'parent_name'=>$m[1][1] ?? '', ]); $dict[$name]=$val; } print_r($dict); //Let's get parent IDs from dictionary by name foreach($dict as &$val) $val['parent']=$dict[$val['parent_name']]['id'] ?? 0; print_r($dict); //Remove keys $result=array_values($dict); //Sort by IDs sort($result); print_r($result);

preferences:
25.46 ms | 408 KiB | 5 Q