41

将数组中的所有键增加 1 的最简单解决方案是什么?

前:

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

后:

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

6 回答 6

46

您可以使用

$start_zero = array_values($array); /* Re-Indexing Array To Start From Zero */

如果你想从索引 1 开始使用

$start_one = array_combine(range(1, count($array)), array_values($array));
于 2012-10-03T19:34:38.470 回答
33

好吧,有一种非常简单的方法可以做到:

$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)));
于 2012-10-03T19:40:36.683 回答
13

我不确定你为什么要这样做,但你应该能够循环:

$new_array = array();
foreach($arr as $key => $value){
   $new_array[$key+1] = $value;
}
$arr = $new_array;
于 2012-10-03T19:34:40.660 回答
5
$count = count($arr);
for($i=$count; $i>0; $i--){
    $arr[$i] = $arr[$i-1];
}
unset($arr[0]);
于 2012-10-03T19:35:51.307 回答
2

我知道这个问题已经很老了,但我最近遇到了一个类似的问题,并想出了一个很好的单行代码来解决任何类型的数组,使用任意整数作为起始键:

$array = array_combine(array_keys(array_fill($starting_index, count($array), 0)), array_values($array));

$starting_index 是您想要的初始整数键的任何值,例如 3。

这甚至可以与包含复杂对象的数组一起使用,这与使用 array_flip 的解决方案不同,并且不会像其他一些解决方案那样限制您从 0 或 1 开始索引。

于 2015-07-23T20:29:59.773 回答
0

我不确定这是否有资格作为一个班轮,但这是一种不同的方式

$result = array_reduce(array_keys($arr),function($carry,$key) use($arr){
     $carry[$key+1] = $arr[$key]; 
     return $carry;
},[]);
于 2015-08-26T12:33:29.630 回答