fork download
  1. <?php
  2.  
  3. $a = [
  4. 1=>[
  5. 'id'=>1,
  6. 'parent'=>0
  7. ],
  8. 2=>[
  9. 'id'=>2,
  10. 'parent'=>1
  11. ],
  12. 3=>[
  13. 'id'=>3,
  14. 'parent'=>2
  15. ],
  16. 4=>[
  17. 'id'=>4,
  18. 'parent'=>1
  19. ]
  20. ];
  21.  
  22. function parentList($map, &$element){
  23. if(!isset($element['inh'])){
  24. if($pid = $element['parent']){
  25. $element['inh'] = array_merge([$pid], parentList($map, $map[$pid]));
  26. }else{
  27. $element['inh'] = [];
  28. }
  29. }
  30. return $element['inh'];
  31. }
  32.  
  33. foreach($a as &$e){
  34. parentList($a, $e);
  35. }
  36.  
  37. print_r($a);
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Array
(
    [1] => Array
        (
            [id] => 1
            [parent] => 0
            [inh] => Array
                (
                )

        )

    [2] => Array
        (
            [id] => 2
            [parent] => 1
            [inh] => Array
                (
                    [0] => 1
                )

        )

    [3] => Array
        (
            [id] => 3
            [parent] => 2
            [inh] => Array
                (
                    [0] => 2
                    [1] => 1
                )

        )

    [4] => Array
        (
            [id] => 4
            [parent] => 1
            [inh] => Array
                (
                    [0] => 1
                )

        )

)