Php 如何将数组中的所有键增加1?
将数组中的所有键增加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
$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如果您不希望重置索引,这是最简单的方法…效果很好..这应该是答案…谢谢!仅适用于具有标量值的数组。例如,如果元素的值是数组/对象,则不起作用。只有这一个对我有效,谢谢!