41

配列内のすべてのキーを1つ増やす最も簡単な解決策は何ですか?

前:

$arr[0] = 'a';
$arr[1] = 'b';
$arr[2] = 'c';

後:

$arr[1] = 'a';
$arr[2] = 'b';
$arr[3] = 'c';
4

6 に答える 6

46

使用できます

$start_zero = array_values($array); /* Re-Indexing Array To Start From Zero */

インデックス1から開始する場合は、

$start_one = array_combine(range(1, count($array)), array_values($array));
于 2012-10-03T19:34:38.470 に答える
33

さて、それを行うための非常に簡単な方法が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)));
于 2012-10-03T19:40:36.683 に答える
13

なぜこれを実行したいかはわかりませんが、ループできるはずです。

$new_array = array();
foreach($arr as $key => $value){
   $new_array[$key+1] = $value;
}
$arr = $new_array;
于 2012-10-03T19:34:40.660 に答える
5
$count = count($arr);
for($i=$count; $i>0; $i--){
    $arr[$i] = $arr[$i-1];
}
unset($arr[0]);
于 2012-10-03T19:35:51.307 に答える
2

私はこの質問がかなり古いことを知っていますが、最近同様の問題に遭遇し、開始キーとして任意の整数を使用して任意のタイプの配列に対してそれを解決するための素晴らしいワンライナーを思いつきました:

$array = array_combine(array_keys(array_fill($starting_index, count($array), 0)), array_values($array));

$ starting_indexは、最初の整数キーに必要な値です(例:3)。

これは、array_flipを使用するソリューションとは異なり、複雑なオブジェクトを保持する配列でも使用でき、他のソリューションのようにインデックスを0または1から開始するように制限されません。

于 2015-07-23T20:29:59.773 に答える
0

これがワンライナーとして適格かどうかはわかりませんが、それを行う別の方法です

$result = array_reduce(array_keys($arr),function($carry,$key) use($arr){
     $carry[$key+1] = $arr[$key]; 
     return $carry;
},[]);
于 2015-08-26T12:33:29.630 に答える