Во-первых, я должен перечислить, что я нашел
Как удалить элемент массива, а затем повторно индексировать массив?
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 );