この質問の本質は標準入力ではないので、一旦標準入力であるということは忘れ、まずはfor文の部分をループさせずに類似コードに起こしてみましょう。
$i = 1;
$stock_{$i} = ['25', '36'];
さて、ここで['25', '36']
という配列が代入された変数は何でしょうか。おそらく質問者さんの考えではこれが$stock_1
になっているというのが質問文から読み取れることですが、それはよくある勘違いの一つです。
PHPにおいて、{$i}
は[$i]
と同様に配列のインデックスアクセスとして利用できます。つまり、 $stock_
という変数を配列にし、そのインデックス$i
に例の配列が入ります。
// var_dump($stock_);
array(1) {
[1]=>
array(2) {
[0]=>
string(2) "25"
[1]=>
string(2) "36"
}
}
// echo $stock_[1][0];
25
プログラム的には配列として扱うのが一般的かと思います。ですが、もし質問文のように$stock_1
という変数に代入したいというシチュエーションはあるかもしれません。PHPでは可変変数を使い難なくできます。
${"stock_{$i}"} = ['25', '36'];
var_dump($stock_1);
// array(2) {
// [0]=>
// string(2) "25"
// [1]=>
// string(2) "36"
// }
まあ、あまりこのようなコードを書く機会はないことを願いたいまでですが……
$stock_{$i} = (int)explode(" ", fgets(STDIN));
としても何も変わりませんでした。
上に示したとおりです。
一方で、
とすると、0だけ出力されました。これもなぜかわからず、混乱しております。
PHPでは未定義の変数にアクセスすると(E_NOTICEは返したりしますが)NULL
になります。これを(int)
で整数にキャストしてるわけですから(int)NULL
となり、0にキャストされます。
※ 8.0でWarnにかわりそうです