公式のPHPドキュメントによると、 array_fill()の$ start_indexは負の数を受け入れることができます。これは、負の数が$ start_indexとして渡される場合、PHPはそれを配列の終わりから始まる位置として扱うことを意味します。
たとえば、 $ start_indexが-1の場合、配列の最後の要素を指します。 $ start_indexが-2の場合、最後から2番目の要素などを指します。
$array = array_fill(-3, 5, 'PHP');
print_r($array);
この例では、負の数-3で渡され、塗りつぶしがアレイの3番目の最後の位置から始まることを示します。結果は次のとおりです。
Array
(
[0] => PHP
[1] => PHP
[2] => PHP
[3] => PHP
[4] => PHP
)
開始インデックスとして-3を渡しましたが、 array_fill()関数はエラーや警告を生成しませんが、arrayを正常に埋めるため、スタート位置はネガティブインデックスに従って自動的に調整されます。最終配列は、インデックス0から始まって引き続き正常に作成できます。
$ start_indexパラメーターとして負の数を使用することは、場合によっては有効ですが、予期しない結果や理解が困難な動作にもつながる可能性があります。特に、配列の初期インデックスがゼロから始まっていない場合、またはアレイに十分な要素がない場合、負のインデックスは何らかの混乱を引き起こす可能性があります。
array_fill()の$ numパラメーターが大きく、 $ start_indexが負の数値である場合、存在しない配列の場所にアクセスしようとする場合があります。例えば:
$array = array_fill(-10, 5, 'PHP');
print_r($array);
この場合、 -10はアレイの終わりから10番目の位置と見なされます。元の配列が空であるか、負のインデックスからのパディングをサポートするのに十分でない場合、それは予期しない結果をもたらす可能性があります。 PHPはエラーを報告しませんが、その動作により、予想される結果が得られません。
負のインデックスの動作は、配列の元のインデックスがゼロから開始されない場合、混乱を引き起こす可能性があります。たとえば、既に配列があり、 array_fill()に渡された場合、 $ start_indexが負の場合、結果の配列のインデックスは予測不可能になります。
上記の問題を回避するには、 array_fill()を使用する場合、渡された$ start_indexを再確認することをお勧めします。配列の端からパディングを開始する必要がある場合は、ネガティブインデックスを明示的に使用できますが、特に動的データを扱う場合、負のインデックスが配列の境界を超えないようにしてください。
さらに、塗りつぶしの動作を予想範囲を超えたくない場合は、最初に$ start_indexが妥当かどうかを確認するか、 array_slice()などの関数を使用して、充填前に配列のサイズを制限することができます。