PHP の配列は連想配列しかなく、そのキーの採番方法も他言語ではあまり見られない印象を受けます。近いのは MySQL のオートインクリメントあたりです。具体的には既存の int 型のキーの最大値より 1 大きい値をキーとします。
PHP: 配列 – Manual#複雑な型のキャストと上書きの例
例を出すと次です。
<?php $a = [ 2 => 'ABC', ]; $a[] = 'DEF'; array_push($a, 'GHI'); var_dump($a); /* array(3) { [2]=> string(3) "ABC" [3]=> string(3) "DEF" [4]=> string(3) "GHI" }*/
Online PHP editor | output for VaWsr
最初の時点で 2 があるので続いて 3, 4 が追加されました。これを利用して配列の大きさや計算資源にも余裕があるのに配列を増やせなくすることができます。これは次でできます。
<?php // PHPで扱えるINTの最大値をあらかじめキーとしておきます $a = [PHP_INT_MAX => 'ABC']; $a[] = 1; // Fatal error: Uncaught Error: Cannot add element to the array as the next element is already occupied // 追加できずに停止します
Online PHP editor | output for 4899u
意図してこれを埋め込むことはまずないでしょうが、実は不具合や脆弱性につながるパターンがあります。それはユーザー入力を配列のキーにした後に配列の末尾にキーを指定せずに要素を追加する処理がある場合です。特にこの場合が複数のユーザー間で影響する場合、悪意あるユーザーが巨大な値をこの処理に渡すことによって、システムを利用したいユーザーが利用できない状況を作れてしまいます。