0

私はPHPが初めてです。「echo」を使用して配列要素を出力する場合、成功するかどうかはインデックスの名前に依存するようです。そんなはずないでしょ!? 気が狂いそうです。このコード:

$ARRAY['q1'] = 'foo';
echo "q1 is $ARRAY[q1]<br>";

正常に動作します。しかし、このコード:

$ARRAY['1q'] = 'foo';
echo "1q is $ARRAY[1q]<br>";

次のエラーが発生します。

解析エラー: 構文エラー、予期しない T_STRING、6 行目の /var/www/html/test.php の ']' が必要です

次のように問題を修正できることを知っています。

echo "1q is " . $ARRAY['1q'] . "<br>";

しかし、私の質問は、配列インデックス「1q」と「q1」が最初のコードブロックで問題になるのはなぜですか? 1q が何らかの定数であるかどうかも確認しましたが、そうではないようです。これは配列要素を文字列に挿入する不適切な方法ですか? (PHPのドキュメントからコピーしました。)

これは PHP 5.3.8 にあります。どんな助けでも本当に感謝しています。

編集: わかりました、PHP マニュアルのこのページの例 #8 からこのエコー構文を取得しました: http://www.php.net/manual/en/language.types.string.php どうやらそれは正しい方法ではありませんもの。ユーザー投稿のメモをマニュアルに追加します。

このエラーを生成するスクリプト全体は次のようになります。

<?php
$ARRAY['1q'] = 'foo';
echo "1q is $ARRAY[1q]<br>"; 
?>
4

3 に答える 3

3

配列キーをある種のリテラルとして処理しようとしているためです。q1これが機能するのは、名前が付けられた定数がないためq1、PHPはそれが文字列であると想定しているためです。1qただし、数値として見始めるため失敗します。

とにかく、そのような文字列に配列を埋め込むべきではありません。次のいずれかを使用します。

echo "1q is {$ARRAY['1q']}";
echo "1q is ".$ARRAY['1q'];
于 2012-04-22T21:38:16.633 に答える
0

二重引用符で囲まれた文字列で配列を使用する場合、PHPが配列キーが数字で始まることを確認すると、キー全体が数値インデックスであると見なされます。

echo "$arr[123abc]";

として解釈され$arr[123]ます。abcテンキーには非数値コンポーネントを含めることができないため、この部分は予想される文字列エラーを生成するものです。

これを修正するには、を使用する必要があります

echo "1q is {$ARRAY['1q]'}<br>";
            ^       ^   ^^

適切に引用された配列インデックス

于 2012-04-22T21:41:17.037 に答える
0

連結する必要はありません。試してみてくださいecho "1q is {$ARRAY['1q']}";

  • 文字列内であっても、文字列配列キーにアクセスするには常に引用符を使用する必要があります。
  • 文字列内の{}に変数を含めることをお勧めします。
于 2012-04-22T21:41:52.383 に答える