古いバージョンのPHPでは次のことができます。
$arr = ['foo', 'bar']; var_dump($arr); foreach ($arr as $i => $v) { $arr[$i]['string'] = 'baz'; }
今、私はPHP7に、このような操作をやっているとき、それは次のエラーで失敗します。
Illegal string offset 'string' [sample.php, line 4]
なぜこれがあると、なぜ私はもうこれを行うことはできませんか?私はすでにPHP7での型キャストに関する多くの答えを見つけました。それはもはや優雅ではないので、それはそれと関係していると思われますが、Web上で私の答えを見つけることはできません。何か不足していますか?
array (size=2) 0 => string 'boo' (length=3) 1 => string 'bar' (length=3)
ライン2から
のvar_dump結果はforeachの後、私は
array (size=2) 'foo' => array (size=1) 'string' => string 'baz' (length=3) 'bar' => array (size=1) 'string' => string 'baz' (length=3)
なぜあなたは '$ arr [$ i] ['string'] = 'baz';'? *文字列*のフィールド 'string'にアクセスすることは全く論理的ではないようです。なぜ$ arr [$ i] = ['string' => 'baz']; '? *編集:*あなたの期待される出力をもっと見ると、私はさらに難解です。配列の* value *が突然* keys *になるとどう思いますか?長い話は、単にPHPの仕組みではありません。 –
'foo'と 'bar'のどちらも配列ではないので、要素を押し込むことができないのでしょうか? – gavgrif
私はこの瞬間にとても馬鹿だと感じます。私は私が思った配列の型にアクセスしていませんでした。だからmサンプルで私は何が起こったか再現していましたが、それはさらに私の考えを混乱させました。 @FelixKlingが何を言っているのか考えてみると、私の心をまっすぐに引き出すことができました。 – Jelmer