fork download
  1. <?php
  2.  
  3. $root = array(
  4. 'nodes'=>array(
  5. '1'=>array(
  6. 'id'=>'1',
  7. 'nodes'=>array(
  8. '4'=>array(
  9. 'id'=>'4',
  10. 'nodes'=>array(
  11. '5'=>array(
  12. 'id'=>'5',
  13. 'nodes'=>array()
  14. )
  15. )
  16. )
  17. )
  18. ),
  19. '2'=>array(
  20. 'id'=>'2',
  21. 'nodes'=>array(
  22.  
  23. )
  24. ),
  25. '3'=>array(
  26. 'id'=>'3',
  27. 'nodes'=>array(
  28.  
  29. )
  30. )
  31. )
  32. );
  33.  
  34. foreach ($root['nodes'] as $_node_id => &$_root_node) {
  35. $_put_parent = function (&$_node) use (&$_put_parent) {
  36. foreach ($_node['nodes'] as $_sub_node_id => &$_sub_node) {
  37. $_put_parent($_sub_node);
  38. $_sub_node['parent'] = $_node;
  39. }
  40. };
  41.  
  42. $_root_node['parent'] = null;
  43. $_put_parent($_root_node);
  44. }
  45.  
  46. echo '<pre>';
  47. var_dump($root['nodes']['1']['nodes']['4']);
  48. var_dump($root['nodes']['1']['nodes']['4']['nodes']['5']['parent']);
  49. echo '</pre>';
  50.  
  51. ?>
Success #stdin #stdout 0.03s 52480KB
stdin
Standard input is empty
stdout
<pre>array(3) {
  ["id"]=>
  string(1) "4"
  ["nodes"]=>
  &array(1) {
    [5]=>
    array(3) {
      ["id"]=>
      string(1) "5"
      ["nodes"]=>
      array(0) {
      }
      ["parent"]=>
      array(2) {
        ["id"]=>
        string(1) "4"
        ["nodes"]=>
        *RECURSION*
      }
    }
  }
  ["parent"]=>
  array(3) {
    ["id"]=>
    string(1) "1"
    ["nodes"]=>
    &array(1) {
      [4]=>
      *RECURSION*
    }
    ["parent"]=>
    NULL
  }
}
array(2) {
  ["id"]=>
  string(1) "4"
  ["nodes"]=>
  &array(1) {
    [5]=>
    array(3) {
      ["id"]=>
      string(1) "5"
      ["nodes"]=>
      array(0) {
      }
      ["parent"]=>
      *RECURSION*
    }
  }
}
</pre>