2016-11-04 21 views
2

古いバージョンの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) 
+3

なぜあなたは '$ arr [$ i] ['string'] = 'baz';'? *文字列*のフィールド 'string'にアクセスすることは全く論理的ではないようです。なぜ$ arr [$ i] = ['string' => 'baz']; '? *編集:*あなたの期待される出力をもっと見ると、私はさらに難解です。配列の* value *が突然* keys *になるとどう思いますか?長い話は、単にPHPの仕組みではありません。 –

+3

'foo'と 'bar'のどちらも配列ではないので、要素を押し込むことができないのでしょうか? – gavgrif

+0

私はこの瞬間にとても馬鹿だと感じます。私は私が思った配列の型にアクセスしていませんでした。だからmサンプルで私は何が起こったか再現していましたが、それはさらに私の考えを混乱させました。 @FelixKlingが何を言っているのか考えてみると、私の心をまっすぐに引き出すことができました。 – Jelmer

答えて

2

$arr[$i]['string'] = 'baz';は、あなたがそれだと思うものに代入されていない次のような結果を期待していました。段階的に取る:

$arr[$i]$arrの項目です。 $arrは文字列の配列です。たとえば、$i0であれば、'foo'になりました。

$arr[$i]['string']の場合、文字列内の項目です(この場合は'foo')。文字列には数字の付いた文字オフセットしかありません(この場合は01および2となります)。 'string'は整数ではないため、文字オフセットではないため、エラーが発生します。

関連する問題