この 2 つのインデックスに違いはありますか? もしそうなら、どちらを使用するのが良いでしょうか? パフォーマンスと違いについての情報があれば教えてください。
$array[$data]
$array["$data"]
前もって感謝します!
*編集; ちょうど出くわしました$array["{$data}"]
、それについて何か情報はありますか?
個人的には、明快さのために最初のバージョンを選びます。PHPはあなたのためにそれを整理します:
$a = range(1,10);
$data = 2;
echo $a[$data];//3
$b = array('foo' => 'bar');
echo $b[$data];//notice undefined offset, echoes nothing!
$data = 'foo';
echo $b[$data];//echo bar
他のいくつかの理由: '$data'
!== "$data"
、一重引用符と二重引用符には違いがあるためです。したがって、2 番目の方法はエラーが発生しやすくなります。
配列の使用は面倒です:
$a[$data['key']];//is clear: use value of $data -> key
に比べ:
$a["{$data[key]}"];
//or
$a["{$data['key']}"];
個人的な好みの余地があります。それは良いことのように思えるかもしれませんが、Git のような SVC システムを使用してチームで作業する場合、これはすぐに苦痛であることがわかります...信じてください!
ノート:
質問の編集について("{$var}"
)。これはComplex (curly) syntaxと呼ばれ、あいまいさを避けるためにあります。
echo "some string with $an[array][value]";
パーサーは何をすべきか? エコーする必要があります:
"some string with <value of$an>[array][value]";
配列のキー アクセサーを文字列定数として扱う、または次のことを意味します。
"some string with <$an[array][value]>";
「some string with foobar」と「some string with array[array][value]」がエコーされる可能性があるため、式をグループ化します。
echo "some string with {$an[array][value]}";
二重引用符を使用すると、変数がそのまま正確に機能するため、特定のケースでは違いはありません。
ただし、実際のテキストを使用すると、連想配列で非常に大きな違いが生じます。
$array[fluffeh]; // Will not work
$array['fluffeh']; will reference the key called fluffeh in the array.
二重引用符内の変数は、文字列の一部であるかのように機能します。ただし、変数を単一引用符で囲むと、期待どおりに機能しません。
$var='fluffeh';
$array[$var]; // Will find the element 'fluffeh'
$array["$var"]; // Will find the element 'fluffeh'
$array['$var']; // Will try to find an element called '$var'