fork(1) download
  1. <?php
  2. function count_children1(&$array){
  3. foreach($array['children'] as &$child){
  4. if(isset($child['children'])){
  5. $array['children_count'] += count_children($child);
  6. }
  7. else return 1;
  8. }
  9. }
  10.  
  11. function count_children(&$table){
  12. $count = 0;
  13. foreach($table as &$array) {
  14. if (isset($array['children'])) {
  15. $count += count($array['children']);
  16. $count += count_children($array['children']);
  17. }
  18. $array['children_count'] = $count;
  19. }
  20. return $count;
  21. }
  22.  
  23. $table1 = [[1] => [
  24. ['id'] => 1,
  25. ['children_count'] => 0
  26. ],2,3];
  27.  
  28. $table = [
  29. 1 => [
  30. 'id' => 1,
  31. 'children_count' => 0
  32. ],
  33. 2 => [
  34. 'id' => 2,
  35. 'children_count' => 0,
  36. 'children' => [
  37. 3 => [
  38. 'id' => 3,
  39. 'children_count' => 0,
  40. 'children' => [
  41. 4 => [
  42. 'id' => 4,
  43. 'children_count' => 0,
  44. 'children' => [
  45. 5 => [
  46. 'id' => 5,
  47. 'children_count' => 0
  48. ],
  49.  
  50. 6 => [
  51. 'id' => 6,
  52. 'children_count' => 0
  53. ]
  54. ]
  55. ]
  56. ]
  57. ]
  58. ]
  59. ]
  60.  
  61. ];
  62.  
  63. $table1 = [
  64. 1 => [
  65. 'id' => 1,
  66. 'children_count' => 0
  67. ],
  68. 2 => [
  69. 'id' => 2,
  70. 'children_count' => 0,
  71. 'children' => [
  72. 3 => [
  73. 'id' => 3,
  74. 'children_count' => 0,
  75. 'children' => [
  76. 4 => [
  77. 'id' => 4,
  78. 'children_count' => 0,
  79. 'children' => [
  80. 5 => [
  81. 'id' => 5,
  82. 'children_count' => 0
  83. ],
  84.  
  85. 6 => [
  86. 'id' => 6,
  87. 'children_count' => 0
  88. ]
  89. ]
  90. ]
  91. ]],
  92. 7 => [
  93. 'id' => 7,
  94. 'children_count' => 0
  95. ],
  96.  
  97. ]
  98.  
  99. ]
  100. ];
  101.  
  102. //var_dump($table);
  103. foreach($table as &$element){
  104. // if(isset($element['children'])) count_children($element);
  105. }
  106.  
  107. count_children($table1);
  108.  
  109. print_r($table1);
  110.  
Success #stdin #stdout #stderr 0.02s 24400KB
stdin
Standard input is empty
stdout
Array
(
    [1] => Array
        (
            [id] => 1
            [children_count] => 0
        )

    [2] => Array
        (
            [id] => 2
            [children_count] => 5
            [children] => Array
                (
                    [3] => Array
                        (
                            [id] => 3
                            [children_count] => 3
                            [children] => Array
                                (
                                    [4] => Array
                                        (
                                            [id] => 4
                                            [children_count] => 2
                                            [children] => Array
                                                (
                                                    [5] => Array
                                                        (
                                                            [id] => 5
                                                            [children_count] => 0
                                                        )

                                                    [6] => Array
                                                        (
                                                            [id] => 6
                                                            [children_count] => 0
                                                        )

                                                )

                                        )

                                )

                        )

                    [7] => Array
                        (
                            [id] => 7
                            [children_count] => 3
                        )

                )

        )

)
stderr
PHP Warning:  Illegal offset type in /home/mzudJr/prog.php on line 24
PHP Warning:  Illegal offset type in /home/mzudJr/prog.php on line 26
PHP Warning:  Illegal offset type in /home/mzudJr/prog.php on line 26