fork download
  1. <?php
  2.  
  3.  
  4. $all_cats = [
  5. [
  6. 'id' => 7,
  7. 'parent_id' => 6,
  8. 'name' => 'Category 7 level 4'
  9. ],
  10. [
  11. 'id' => 0,
  12. 'parent_id' => -1,
  13. 'name' => 'Category 0 level 0'
  14. ],
  15. [
  16. 'id' => 1,
  17. 'parent_id' => 0,
  18. 'name' => 'Category 1 level 1'
  19. ],
  20. [
  21. 'id' => 2,
  22. 'parent_id' => 0,
  23. 'name' => 'Category 2 level 1'
  24. ],
  25. [
  26. 'id' => 3,
  27. 'parent_id' => 0,
  28. 'name' => 'Category 3 level 1'
  29. ],
  30. [
  31. 'id' => 4,
  32. 'parent_id' => 2,
  33. 'name' => 'Category 4 level 2'
  34. ],
  35. [
  36. 'id' => 5,
  37. 'parent_id' => 2,
  38. 'name' => 'Category 5 level 2'
  39. ],
  40. [
  41. 'id' => 6,
  42. 'parent_id' => 5,
  43. 'name' => 'Category 5 level 3'
  44. ],
  45. ];
  46.  
  47.  
  48.  
  49. function get_cat_recursive($id_check, $array_check, $array_temp, $use_merge)
  50. {
  51.  
  52. foreach ($array_check as $key => $value) {
  53.  
  54. if ( $id_check == $value['parent_id']) {
  55.  
  56. array_push($array_temp, $value['id']);
  57. $new_array = get_cat_recursive($value['id'], $array_check, $array_temp, $use_merge);
  58. if ($use_merge) {
  59. $array_temp = array_merge($array_temp, $new_array);
  60. } else {
  61. $array_temp += $new_array;
  62. }
  63.  
  64. }
  65.  
  66. }
  67. return $array_temp;
  68.  
  69. }
  70.  
  71.  
  72. echo "With plus:\n";
  73. $result = get_cat_recursive(2, $all_cats, [], false);
  74. print_r($result);
  75.  
  76. echo "\n\nWith array_merge:\n";
  77. $result = get_cat_recursive(2, $all_cats, [], true);
  78. print_r($result);
  79.  
Success #stdin #stdout 0s 82560KB
stdin
Standard input is empty
stdout
With plus:
Array
(
    [0] => 4
    [1] => 5
    [2] => 6
    [3] => 7
)


With array_merge:
Array
(
    [0] => 4
    [1] => 4
    [2] => 5
    [3] => 4
    [4] => 4
    [5] => 5
    [6] => 6
    [7] => 4
    [8] => 4
    [9] => 5
    [10] => 6
    [11] => 7
    [12] => 4
    [13] => 4
    [14] => 5
    [15] => 6
    [16] => 7
)