Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $array = array(
- array (
- 'text' => 'Element 1',
- 'level' => '1'
- ),
- array (
- 'text' => 'Element 2',
- 'level' => '2'
- ),
- array (
- 'text' => 'Element 3',
- 'level' => '2'
- ),
- array (
- 'text' => 'Element 4',
- 'level' => '3'
- ),
- array (
- 'text' => 'Element 5',
- 'level' => '1'
- ),
- array (
- 'text' => 'Element 6',
- 'level' => '1'
- ),
- );
- $stack = array();
- $count = 0;
- $level = 1;
- $result = array();
- for ($i = 0; $i < count($array); $i++) {
- $tmp = &$result;
- foreach ($stack as $index) {
- $tmp = &$tmp['elements'][$index];
- }
- if (!isset($tmp['elements'])) {
- $tmp['elements'] = array();
- }
- $tmp['elements'][]= $array[$i];
- $count++;
- if (isset($array[$i + 1])) {
- if ($array[$i + 1]['level'] > $level) {
- // Сохраняем место куда будем добавлять в следующий раз
- array_push($stack, $count - 1);
- // Начинаем считать заново
- $count = 0;
- // Уровень увеличиваем
- $level++;
- } elseif ($array[$i + 1]['level'] < $level) {
- // вычисляем на сколько уровней поднимаемся
- $diff = $level - $array[$i + 1]['level'];
- for ($j = 0; $j < $diff; $j++) {
- array_pop($stack);
- }
- } else {
- // do nothing
- }
- }
- }
- $result = $result['elements'];
- print_r ($result);
Add Comment
Please, Sign In to add comment