Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将数组中的所有键增加1?_Php_Arrays - Fatal编程技术网

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

Php 如何将数组中的所有键增加1?,php,arrays,Php,Arrays,将数组中的所有键增加1的最简单解决方案是什么 之前: $arr[0] = 'a'; $arr[1] = 'b'; $arr[2] = 'c'; $arr[1] = 'a'; $arr[2] = 'b'; $arr[3] = 'c'; 之后: $arr[0] = 'a'; $arr[1] = 'b'; $arr[2] = 'c'; $arr[1] = 'a'; $arr[2] = 'b'; $arr[3] = 'c'; 你可以用 $start_zero = array_values($ar

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

之前:

$arr[0] = 'a';
$arr[1] = 'b';
$arr[2] = 'c';
$arr[1] = 'a';
$arr[2] = 'b';
$arr[3] = 'c';
之后:

$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));

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

$new_array = array();
foreach($arr as $key => $value){
   $new_array[$key+1] = $value;
}
$arr = $new_array;

有一个非常简单的方法:

$arr = array('a', 'b', 'c');
array_unshift($arr, null);
unset($arr[0]);
print_r($arr);
/* 
Array
(
    [1] => a
    [2] => b
    [3] => c
)
*/
当然,这只适用于简单的密集阵列

这是一种最不寻常的方式(但都是单线性的,同时适用于密集阵列和稀疏阵列):


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

$array = array_combine(array_keys(array_fill($starting_index, count($array), 0)), array_values($array));
$starting_index是初始整数键所需的任意值,例如3


这甚至可以用于包含复杂对象的数组,与使用array_flip的解决方案不同,它不会像其他一些解决方案一样将索引限制为0或1。

我不确定这是否符合单行程序,但这是一种不同的方法

$result = array_reduce(array_keys($arr),function($carry,$key) use($arr){
     $carry[$key+1] = $arr[$key]; 
     return $carry;
},[]);


你为什么要这么做?@Brad只是为了好玩:好问题!所有关闭这个网站的人都感到羞耻!这种情况有很多种。移位/偏移是一个非常常见的动作。实际上我现在需要一个问题的答案,我不仅想增加两者,还想减少:)@Telvin Nguyen,可能是这样的?:-)<代码>$new_array=array();foreach($arr as$key=>$value){$new_数组[$key-1]=$value;}$arr=$new_数组`@斯坦:你这是什么意思?你是否明确地试图将一个简单的解决方案过度复杂化?我只是在寻找一个“一行”的解决方案。我认为这是最完整的解决方案,因为它适用于密集阵列和稀疏阵列。当然,它不像其他解决方案那样全面,但它应该是最快、可读性最好的解决方案。不过,我想知道我们是不是错过了另一个
家庭作业
候选人。)在某些情况下,这会给你带来麻烦。如果将[1]增加1,则将覆盖[2]。在您的示例中,它将像foreach处理数组的副本一样工作,但在oop或引用编程中,这将导致死亡you@Panique-在任何情况下都不重要,因为在最后一行中,原始数组被
$new_array
完全覆盖之前,不会触及原始数组
$arr
。这就是为什么我们使用
$new_array
作为中间层。是否有一个您会担心的特定场景?除了这会导致一个包含4个元素的数组不能使用稀疏数组(如
array('a','b',5=>'c')
)。这不是OP问题中的规范。它也不适用于关联数组。我们应该把每个人的答案都标错吗?因为在应用数学之前,没有人检查键是否是字符串?谢谢。那可能行得通。我在寻找“一行”解决方案。:-)注意,这将重新索引它们的数组。如果您的索引在技术上不连续,可能会将索引更改为大于或小于1,请记住这一点(5.增加数组也不行,有什么建议吗?谢谢Mandara和Alien先生。我已经解决了。如果你想添加到数组中,请按照以下步骤:$countPrevArray=count($arrayPrev);$arrayToAdd=array_组合(范围($countPrevArray,count($addArray)+$countPrevArray-1),数组值($addArray));$arrayPrev=$arrayPrev+$arrayToAdd;为什么
array_values()
第二行是否需要?+1如果您不希望重置索引,这是最简单的方法…效果很好..这应该是答案…谢谢!仅适用于具有标量值的数组。例如,如果元素的值是数组/对象,则不起作用。只有这一个对我有效,谢谢!