Какое самое простое решение для увеличения на 1 все ключи в массиве?
ДО:
$arr[0] = 'a';
$arr[1] = 'b';
$arr[2] = 'c';
ПОСЛЕ:
$arr[1] = 'a';
$arr[2] = 'b';
$arr[3] = 'c';
Какое самое простое решение для увеличения на 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_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;
},[]);