配列内のすべてのキーを1つ増やす最も簡単な解決策は何ですか?
前:
$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));
さて、それを行うための非常に簡単な方法が1つあります。
$arr = array('a', 'b', 'c');
array_unshift($arr, null);
unset($arr[0]);
print_r($arr);
/*
Array
(
[1] => a
[2] => b
[3] => c
)
*/
もちろん、単純な高密度アレイでのみ機能します。
そして、これは最も重要な方法です(ただし、ワンライナーであり、密な配列と疎な配列の両方で機能します)。
$arr = array_flip(array_map(function($el){ return $el + 1; }, array_flip($arr)));
なぜこれを実行したいかはわかりませんが、ループできるはずです。
$new_array = array();
foreach($arr as $key => $value){
$new_array[$key+1] = $value;
}
$arr = $new_array;
$count = count($arr);
for($i=$count; $i>0; $i--){
$arr[$i] = $arr[$i-1];
}
unset($arr[0]);
私はこの質問がかなり古いことを知っていますが、最近同様の問題に遭遇し、開始キーとして任意の整数を使用して任意のタイプの配列に対してそれを解決するための素晴らしいワンライナーを思いつきました:
$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;
},[]);