Какое простейшее решение увеличить на 1 все ключи в массиве?
ДО:
$arr[0] = 'a'; $arr[1] = 'b'; $arr[2] = 'c';
ПОСЛЕ:
$arr[1] = 'a'; $arr[2] = 'b'; $arr[3] = 'c';
Вы можете использовать
$start_zero = array_values($array); /* Re-Indexing Array To Start From Zero */
И если вы хотите запустить его из использования индекса 1
$start_one = array_combine(range(1, count($array)), array_values($array));
Ну, есть один очень простой способ сделать это:
$arr = array('a', 'b', 'c'); array_unshift($arr, null); unset($arr[0]); print_r($arr); /* Array ( [1] => a [2] => b [3] => c ) */
с$arr = array('a', 'b', 'c'); array_unshift($arr, null); unset($arr[0]); print_r($arr); /* Array ( [1] => a [2] => b [3] => c ) */
Конечно, будет работать только для простых плотных массивов.
И это самый нетривиальный (хотя и однострочный и работающий как для плотных, так и для разреженных массивов):
$arr = array_flip(array_map(function($el){ return $el + 1; }, array_flip($arr)));
Я не уверен, почему вы хотите это сделать, но вы должны просто пропустить:
$new_array = array(); foreach($arr as $key => $value){ $new_array[$key+1] = $value; } $arr = $new_array;
$count = count($arr); for($i=$count; $i>0; $i--){ $arr[$i] = $arr[$i-1]; } unset($arr[0]);
Я знаю, что этот вопрос довольно старый, но недавно я столкнулся с подобной проблемой и придумал приятный однострочный алгоритм для его решения для любого типа массива с использованием произвольного целого в качестве стартового ключа:
$array = array_combine(array_keys(array_fill($starting_index, count($array), 0)), array_values($array));
$ start_index – это любое значение, которое вы хотите для начального целочисленного ключа, например 3.
Это можно даже использовать с массивами, содержащими сложные объекты, в отличие от решения, использующим array_flip, и не ограничивает вас началом индекса на 0 или 1, как некоторые из других решений.
Я не уверен, что это относится к одному лайнеру, но это другой способ сделать это
$result = array_reduce(array_keys($arr),function($carry,$key) use($arr){ $carry[$key+1] = $arr[$key]; return $carry; },[]);