Как увеличить на 1 все ключи в массиве?

Какое простейшее решение увеличить на 1 все ключи в массиве?

ДО:

$arr[0] = 'a'; $arr[1] = 'b'; $arr[2] = 'c'; 

ПОСЛЕ:

 $arr[1] = 'a'; $arr[2] = 'b'; $arr[3] = 'c'; 

Solutions Collecting From Web of "Как увеличить на 1 все ключи в массиве?"

Вы можете использовать

 $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; },[]);