提高数字键比方说,你有数字键像切片部分和值x
$ar = [0 => 'a', 1 => 'b', 2 => 'c', 3 => 'd', 4 => 'e', 5 => 'f', 6 => 'g'];
阵列和定义4($offset = 4
)所抵消。现在您想要从该偏移量开始切片该数组的一部分。
$slice = array_slice($ar, $offset, null, true);
而你不只是想保持原来的钥匙,但实际上是由1调高,因此结果将是:
Array
(
[5] => e
[6] => f
[7] => g
)
,而不是
Array
(
[4] => e
[5] => f
[6] => g
)
当然,你可以遍历数组(foreach,array_walk)并重新分配所有的键,如:
$new_ar = [];
$raise_by = 1; // Could be any other amount
foreach ($slice as $key => $val) {
$new_ar[$key + $raise_by] = $val;
}
但有没有办法做到这一点,没有额外的外部循环和(重新)分配键?就像“在x位置切分数组并开始使用x + 1键”?
编辑/可能的解决方案:
所作的评论的鼓舞下,我看到了另外2个可能的解决方案,以布莱恩的评论中How to increase by 1 all keys in an array?
静态,短期和基础:
array_unshift($ar, 0);
$result = array_slice($ar, $offset + 1, null, true);
更多灵活,但可能性能较差:
$shift = 1;
$slice = array_slice($ar, $offset, null, true);
$ar = array_merge(range(1, $offset + $shift), array_values($slice));
$result = array_slice($ar, $offset + $shift, null, true);
优点是可以通过任意值来移动键。
你的循环可能是危险的。你必须从头开始,否则将加1,否则你会覆盖下一个值 – Alchalade
嗯,这就是为什么我将它分配给一个新的空数组。 – antesoles
我不认为你会发现比你的解决方案更好或更快。看看这里:https://stackoverflow.com/questions/12715514/how-to-increase-by-1-all-keys-in-an-array –