Guest User

Untitled

a guest
Jun 19th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.69 KB | None | 0 0
  1. <?php
  2. $array = array(
  3. array (
  4. 'text' => 'Element 1',
  5. 'level' => '1'
  6. ),
  7. array (
  8. 'text' => 'Element 2',
  9. 'level' => '2'
  10. ),
  11. array (
  12. 'text' => 'Element 3',
  13. 'level' => '2'
  14. ),
  15. array (
  16. 'text' => 'Element 4',
  17. 'level' => '3'
  18. ),
  19. array (
  20. 'text' => 'Element 5',
  21. 'level' => '1'
  22. ),
  23. array (
  24. 'text' => 'Element 6',
  25. 'level' => '1'
  26. ),
  27. );
  28.  
  29.  
  30. $stack = array();
  31. $count = 0;
  32. $level = 1;
  33. $result = array();
  34.  
  35. for ($i = 0; $i < count($array); $i++) {
  36. $tmp = &$result;
  37. foreach ($stack as $index) {
  38. $tmp = &$tmp['elements'][$index];
  39. }
  40. if (!isset($tmp['elements'])) {
  41. $tmp['elements'] = array();
  42. }
  43. $tmp['elements'][]= $array[$i];
  44.  
  45. $count++;
  46.  
  47. if (isset($array[$i + 1])) {
  48.  
  49. if ($array[$i + 1]['level'] > $level) {
  50.  
  51. // Сохраняем место куда будем добавлять в следующий раз
  52. array_push($stack, $count - 1);
  53. // Начинаем считать заново
  54. $count = 0;
  55. // Уровень увеличиваем
  56. $level++;
  57.  
  58. } elseif ($array[$i + 1]['level'] < $level) {
  59.  
  60. // вычисляем на сколько уровней поднимаемся
  61. $diff = $level - $array[$i + 1]['level'];
  62. for ($j = 0; $j < $diff; $j++) {
  63. array_pop($stack);
  64. }
  65.  
  66. } else {
  67.  
  68. // do nothing
  69.  
  70. }
  71.  
  72. }
  73.  
  74. }
  75.  
  76. $result = $result['elements'];
  77. print_r ($result);
Add Comment
Please, Sign In to add comment