Reindex, увеличивая и уменьшая все верхние индексы

Во-первых, я должен перечислить, что я нашел

Как удалить элемент массива, а затем повторно индексировать массив?

PHP reindex array?

В моем случае они не имели смысла. Я впал в нелепую просьбу, и я вынужден найти выход, тогда, пожалуйста, не спрашивайте меня, почему я хочу это сделать.

У меня есть под массивом

$input = array( 0=>array('a', 'b'=>array('c')), 1=>array('b', 'c'=>array('d')), 2=>array('c', 'd'=>array('e')), ); 

Я хочу увеличить все ключи на 1 или уменьшить на 1 (приемлемый для индекса отрицательный номер int)

Вот ожидаемый результат

 //after increased by 1 $input = array( 1=>array('a', 'b'=>array('c')), 2=>array('b', 'c'=>array('d')), 3=>array('c', 'd'=>array('e')), ); 

или

 //after decreased by 1 $input = array( -1=>array('a', 'b'=>array('c')), 0=>array('b', 'c'=>array('d')), 1=>array('c', 'd'=>array('e')), ); 

Ответ шкафа, который я получил от raina77ow в вопросе Как увеличить на 1 все ключи в массиве?

 $arr = array_flip(array_map(function($el){ return $el + 1; }, array_flip($arr))); 

Но он просто работает с простыми парами ключей массива, если значение массива – это другой массив, а не строка или целое число, это приведет к возникновению исключения

 array_flip(): Can only flip STRING and INTEGER values! 

Дело в том, что я могу обработать массив, чтобы вручную менять список, это был бы последний способ, если бы не было другого решения.

Любая помощь приветствуется!

    Самый простой способ, вероятно, использовать foreach и создать новый массив … вот так:

     $new = array(); foreach($arr as $k=>$v) { $new[$k+1] = $v; // either increase $new[$k-1] = $v; // or decrease } 

    Вы также можете выполнить операцию, передав исходный массив по ссылке .

    Это должно быть трюком.

      // Increase by one $input = array_combine( array_map(function($value) { return $value += 1; }, array_keys($input)), $input );