Это хорошая домашняя задача на уроке программирования.При написании рекурсивной функции начните с кейса, который завершит ваше выполнение.Итак, предположим, что у меня есть мой массив, и я хочу «исправить» его:
$old; // This is my array;
$new = fix($old); // This takes my old array and gives me a fixed one.
Базовый случай - это когда мой массив пуст.Если это так, я просто возвращаю его и больше ничего не делаю.
function fix($a) {
if(empty($a)) return $a;
}
Если оно не пустое, мне нужно перебрать элементы.Если элемент не является массивом, ничего с ним не делайте.
function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(!is_array($v)) // do nothing
}
}
Итак, я хочу сделать что-то, только если $ v является массивом.Что я хочу сделать?Я хочу добавить к нему индекс, содержащий ключ ($ i в моем коде).
function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(is_array($v)) { // Only do something if $v is an array
$a[$i]['id'] = $i;
}
}
}
Почти готово.У нас нет рекурсивного вызова.Поскольку $ v был массивом, его также необходимо исправить.Это легко сделать:
function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(is_array($v)) { // Only do something if $v is an array
$a[$i] = fix($v);
$a[$i]['id'] = $i;
}
}
}
Теперь $ v будет исправлено и заменит его старое "я" в массиве.Затем будет добавлен индекс id.Но есть кое-что важное, что нужно сделать.Нам нужно вернуть фиксированный массив!
function fix($a) {
if(empty($a)) return $a;
foreach($a as $i=>$v) {
if(is_array($v)) { // Only do something if $v is an array
$a[$i] = fix($v);
$a[$i]['id'] = $i;
}
}
return $a;
}