如何将数组中的所有键增加1?

Sta*_*lav 34 php arrays

在阵列中增加1个所有键的最简单的解决方案是什么?

之前:

$arr[0] = 'a';
$arr[1] = 'b';
$arr[2] = 'c';
Run Code Online (Sandbox Code Playgroud)

后:

$arr[1] = 'a';
$arr[2] = 'b';
$arr[3] = 'c';
Run Code Online (Sandbox Code Playgroud)

Mr.*_*ien 39

您可以使用

$start_zero = array_values($array); /* Re-Indexing Array To Start From Zero */
Run Code Online (Sandbox Code Playgroud)

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

$start_one = array_combine(range(1, count($array)), array_values($array));
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.那可能有用.我一直在寻找"一线"解决方案.:-) (2认同)
  • 请注意,这将*重新索引*它们的数组。如果您的索引在技术上不是连续的,这可能会改变索引大于或小于 1,请记住这一点。 (2认同)

rai*_*7ow 32

嗯,有一个非常简单的方法:

$arr = array('a', 'b', 'c');
array_unshift($arr, null);
unset($arr[0]);
print_r($arr);
/* 
Array
(
    [1] => a
    [2] => b
    [3] => c
)
*/
Run Code Online (Sandbox Code Playgroud)

当然,它只适用于简单的密集阵列.

这是最不重要的(但是对于密集和稀疏数组都是单线程的AND)方式:

$arr = array_flip(array_map(function($el){ return $el + 1; }, array_flip($arr)));
Run Code Online (Sandbox Code Playgroud)

  • +1如果您不希望重置索引,这是最直接的. (5认同)

Ben*_*n D 11

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

$new_array = array();
foreach($arr as $key => $value){
   $new_array[$key+1] = $value;
}
$arr = $new_array;
Run Code Online (Sandbox Code Playgroud)

  • @Stan:你是什么意思?您是否明确尝试过度复杂化一个简单的解决方案? (5认同)

Ali*_*guy 5

$count = count($arr);
for($i=$count; $i>0; $i--){
    $arr[$i] = $arr[$i-1];
}
unset($arr[0]);
Run Code Online (Sandbox Code Playgroud)

  • 那不是OP的问题。它也不适用于关联数组。因为没有人在应用数学运算之前检查键是否为字符串,我们是否应该将每个人的答案都标记为错误? (2认同)