Частый посетитель
Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010
Откуда: Minsk
Помог: 3 раз(а)
|
Добрый день. Я имею многомерный массив. У каждого элемента массива может быть флаг 'inactive' => true. Моя задача такова: нужно удалить такой элемент, но чтобы нижние элементы сместились на уровень вверх. Написал функцию, которая работает не всегда (точнее, только тогда, когда первый элемент неактивный). Прощу помощи проанализировать мой код и помочь мне разобраться.
Функция:
PHP:
скопировать код в буфер обмена
function deleteInactive($children, $g = 0) { $g++; $copy = $children; foreach ($copy as $key => $v) { $inactive = false; $gen = $g - 1; $inactive = true; $children = deleteInactive($v['children'], ($g-1)); } else { $gen = $g; $children[$key] = $v; $children[$key]['children'] = deleteInactive($v['children'], $g); } } if (!$inactive) { $children[$key]['generation'] = $gen; } } } return $children; }
Тестовый массив:
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
'id' => 1000, 'generation' => 0, 'id' => 1001, 'generation' => 1, 'id' => 1003, 'generation' => 2, ) ), 'id' => 1004, 'generation' => 2, ) ) ) ), 'id' => 1002, 'generation' => 1, 'id' => 1005, 'generation' => 2, 'inactive' => true, ) ) ), 'id' => 1006, 'generation' => 1, 'id' => 1007, 'generation' => 2, ) ) ), 'id' => 1008, 'generation' => 1, 'id' => 1009, 'generation' => 2, ) ) ) ) );
Вызов функции:
(Отредактировано автором: 16 Февраля, 2011 - 13:00:28)
|