0

以下のコードには、1 行に 2 つのコメントアウトされたバリエーションがあります。それらを実行するとわかるように、かなり異なる結果が生成されます- と の間にスペースがない$array[$key]、キーの個々の文字が配列値にマップされます。

誰かがここで何が起こっているのか、そしてその理由を説明できますか?

ありがとう!

<?php

$letters = array('A','B','C');
$numbers = array(1,2,3);
$matrix = array('Letter' => $letters, 'Number' => $numbers);

foreach($matrix as $array => $list)
{
    echo '<ul>';
    foreach($list as $key => $value)
    //  {echo "<li>$array [$key] = $value ";}
    //  {echo "<li>$array[$key] = $value ";}
    echo '</ul>';
}
4

3 に答える 3

3

"$array[$key]"配列アクセス ( の値$array[$key]) として解釈されます。と同じecho $array[$key];

"$array [$key]"$arrayは、との 2 つの異なる変数として解釈されます$key。と同じecho $array." [".$key."]";

于 2013-06-22T22:39:22.640 に答える
0

The reason for the difference in output is due to the way that PHP parses strings containing variables.

If you change:

{echo "<li>$array [$key] = $value ";}

to

{echo "<li>" . $array [$key] . " = $value ";}

It will result in the same thing and the line below it.

{echo "<li>$array[$key] = $value ";}

PHP is mostly whitespace agnostic, but not inside of strings where intrinsically whitespace matters.

于 2013-06-22T22:41:53.827 に答える
0

「二重引用符」はコードを実行しようとするのに対し、「一重引用符」はコードをテキストとしてのみ処理することに注意してください。

この場合:

echo "<li>$array[$key] = $value ";

このコードは評価中です。ここでは、「この値をこの配列のこの位置に置く」のようなことを言っています。一方、これは:

echo "<li>$array [$key] = $value ";

PHPにとって、パーサーが次のようなものに値を割り当てるのに意味がないため、評価されていません。

[$someting] = $value;

上記のコードは致命的なエラーを返します。

PHP は例外をスローしない方法でコードを処理しようとするため、コードは致命的なエラーを返しません。

コードの最後の例 (スペースを含むもの) は次のとおりです。

echo '<li>' . $array . '[' . $key . '] = ' . $value;

要するに、文字列に変数を表示したいですか?変数をphp文字列の解釈から外します:

echo $myvar . ' = ' . $myvalue;
于 2013-06-22T22:52:45.830 に答える