2016-05-17 3 views
1

はこの考えてみて動作しません引用しダブルネストされた配列が

$a = 'u'; 
$b[$a] = 'v'; 
$c[$b[$a]] = 'w'; 

これは正常に動作します:

php > echo $c[$b[$a]]; 
w 

これも動作します:

php > echo '$c[$b[$a]]'; 
'$c[$b[$a]]' 

しかし、これは構文エラーにつながります:

php > echo "$c[$b[$a]]"; 

PHP Parse error: syntax error, unexpected '[', expecting ']'

短いバージョンでは動作しますが:

php > echo "$b[$a]"; 
v 

なぜ?

+0

ちょっと確認してください:https://3v4l.org/rJbsYテストマシンとあなたのサーバー上のあなたのPHPバージョンは何ですか? – sectus

+0

これは再現できません。 CLIとApache2の両方で動作します。その割り当て自体ではなく、割り当てを取り巻くコードで行う可能性が高くなります。 – apokryfos

+0

@sectus:問題を絞り込んだだけですが、これはサーバーの問題ではなく構文の問題です。私はまだ説明に興味がある、私は完全に質問を言い換えるつもりです、2分でもう一度チェックしてください。 –

答えて

3

double quoted stringには、variable parsingの2種類があります。単純な解析は、1次元の配列またはオブジェクトでのみ機能します。したがって、これらは動作します:

echo "Valid: $foo[1]"; 
echo "Valid: $foo[bar]"; 
echo "Valid: $foo->bar"; 

しかし、これらません。

echo "Invalid: $foo[1][2]"; 
echo "Invalid: $foo->bar->baz"; 
echo "Invalid: $foo->bar()[2]"; 

複雑な解析はhalferは、中括弧内の式をラップ彼の答えに提案するものであり、実際にあなたの問題を解決します。

echo "Valid: ${foo[1][2]}"; 
echo "Valid: ${foo->bar->baz}"; 
echo "Valid: ${foo->bar()[2]}"; 
3

短い答えは:このようなPHPを書かないでください!読み込みが紛らわしい場合は、中間変数を使用します。

しかし、それは固定することができます。

<?php 
$a = 'u'; 
$b[$a] = 'v'; 
$c[$b[$a]] = 'w'; 

echo "{$c[$b[$a]]}"; 

これは、同様にも結構です::で

echo "${c[$b[$a]]}"; 

PHPだけで、変数の最も外側の縁でブレース区切り文字を望んでいるように見えます最初の場合はすべてが中かっこで囲まれ、2番目の場合は中括弧の外側で$が次のビットが変数であると言うことができます。

関連する問題