概要
ドキュメント見ればわかることをあえてやってみた
なぜ今更?
- ふと、javaではArrayとArrayListってのがあったよなと思いだした
- 混乱して何気なく書いていたphpの配列が急にどんな書き方していたかわからなくなった
結論
①配列だと思っていたものはほとんど連想配列だった
②インデックスにする値は型を一定にしておかなければ大変なことになりそう
本文
初期化してない配列の50番目とかにいきなり値を突っ込んだらどうなるのか
こんなコードを動かしてみた
array.php
$array = [];
$array[50] = true;
print var_export($array, true);
出力結果
array (
50 => true,
)
連想配列やん
じゃあこうしたら...?
array.php
$array = [];
$array[50] = true;
print $array[10];
結果...
PHP Notice: Undefined offset: 10 in X:\array.php on line 3
Notice: Undefined offset: 10 in X:\array.php on line 3
それはそう
インデックス指定せずに代入したら
array.php
$array[] = true;
print var_export($array, true);
結果...
array (
0 => true,
)
当然そうなる
じゃあその後にインデックス(?)指定したら...?
array.php
$array[] = true;
$array[50] = false;
print var_export($array, true);
結果
array (
0 => true,
50 => false,
)
$array[] = true;
で自動的に振られたインデックス'0'は普通に連想配列のキー扱いだった
それならさらにこの後自動でインデックス振らせたらどっちになるのか
array.php
$array[] = true;
$array[50] = false;
$array[] = 'bool';
print var_export($array, true);
結果...
array (
0 => true,
50 => false,
51 => 'bool',
)
一番でかいやつの次の値になる
突然文字列をキーに指定してみたり
array.php
$array[] = true;
$array[50] = false;
$array[] = 'bool';
$array['key'] = 'value';
print var_export($array, true);
array (
0 => true,
50 => false,
51 => 'bool',
'key' => 'value',
)
普通に混在する
じゃあその後にキー指定せずに代入すると
array.php
$array[] = true;
$array[50] = false;
$array[] = 'bool';
$array['key'] = 'value';
$array[] = 'next';
print var_export($array, true);
array (
0 => true,
50 => false,
51 => 'bool',
'key' => 'value',
52 => 'next',
)
文字列のキー無視された
感想
適当に書いたらバグがいっぱい湧きそうだとおもいました
今回は一旦満足したのでこれくらいにしておくけれど、キーの自動型変換とかも一旦試した方が理解が確実になりそうなのでまたやります