fork download
  1. <?php
  2.  
  3. function somaRecursiva(&$arr){
  4. if (isset($arr["children"])){
  5.  
  6. $arr["node_value"] = 0;
  7.  
  8. foreach ($arr["children"] as $key => $value){
  9. $arr["node_value"] += somaRecursiva($arr["children"][$key]);
  10. }
  11.  
  12.  
  13. }
  14.  
  15. return $arr["node_value"] ?? 0;
  16. }
  17.  
  18. $array = array(
  19. "node_id"=> 1,
  20. "node_value" => 43.5,
  21. "children" => array (
  22. 0 => array(
  23. "node_id" => 2,
  24. "node_value" => 12.4,
  25. "node_master" => 1),
  26. 1 => array(
  27. "node_id" => 3,
  28. "node_value" => 52.6,
  29. "node_master" => 1),
  30. 2 => array(
  31. "node_id"=> 4,
  32. "node_value" => 43.5,
  33. "children" => array (
  34. 0 => array(
  35. "node_id" => 5,
  36. "node_value" => 49,
  37. "node_master" => 4),
  38. 1 => array(
  39. "node_id" => 6,
  40. "node_value" => 40,
  41. "node_master" => 4)
  42. )
  43. )
  44. )
  45. );
  46.  
  47. somaRecursiva($array);
  48.  
  49. echo "\nDepois da soma:";
  50. print_r($array);
Success #stdin #stdout 0.04s 82880KB
stdin
Standard input is empty
stdout
Depois da soma:Array
(
    [node_id] => 1
    [node_value] => 154
    [children] => Array
        (
            [0] => Array
                (
                    [node_id] => 2
                    [node_value] => 12.4
                    [node_master] => 1
                )

            [1] => Array
                (
                    [node_id] => 3
                    [node_value] => 52.6
                    [node_master] => 1
                )

            [2] => Array
                (
                    [node_id] => 4
                    [node_value] => 89
                    [children] => Array
                        (
                            [0] => Array
                                (
                                    [node_id] => 5
                                    [node_value] => 49
                                    [node_master] => 4
                                )

                            [1] => Array
                                (
                                    [node_id] => 6
                                    [node_value] => 40
                                    [node_master] => 4
                                )

                        )

                )

        )

)