fork download
  1. <?php
  2.  
  3. $categories = [
  4. [
  5. 'name' => 'Категория 1',
  6. 'id' => 1,
  7. ],
  8. [
  9. 'name' => 'Категория 2',
  10. 'id' => 2,
  11. ],
  12. [
  13. 'name' => 'Категория 3',
  14. 'id' => 3,
  15. 'parent_id' => 1,
  16. ],
  17. [
  18. 'name' => 'Категория 4',
  19. 'id' => 4,
  20. 'parent_id' => 2,
  21. ],
  22. [
  23. 'name' => 'Категория 5',
  24. 'id' => 5,
  25. 'parent_id' => 3,
  26. ]
  27. ];
  28.  
  29. $tmp = [];
  30. foreach( $categories as $value ) {
  31. if( ! isset( $value[ 'parent_id' ] ) ) {
  32. $tmp[ $value[ 'id' ] ] = $value[ 'id' ];
  33. ${'category' . $value[ 'id' ]}[] = $value;
  34. }
  35. else {
  36. $tmp[ $value[ 'id' ] ] = $value[ 'parent_id' ];
  37. $key = $value[ 'id' ];
  38. while( $key = array_search( $key, array_flip( $tmp ) ) ) {
  39. $index = $tmp[ $key ];
  40. }
  41. ${'category' . $index}[] = $value;
  42. }
  43. }
  44. print_r( $category1 );
  45. print_r( $category2 );
Success #stdin #stdout 0.02s 24384KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [name] => Категория 1
            [id] => 1
        )

    [1] => Array
        (
            [name] => Категория 3
            [id] => 3
            [parent_id] => 1
        )

    [2] => Array
        (
            [name] => Категория 5
            [id] => 5
            [parent_id] => 3
        )

)
Array
(
    [0] => Array
        (
            [name] => Категория 2
            [id] => 2
        )

    [1] => Array
        (
            [name] => Категория 4
            [id] => 4
            [parent_id] => 2
        )

)