提高數字鍵比方說,你有數字鍵像切片部分和值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 –