以下のエディターは、PHP で二重引用符で囲まれた配列要素にアクセスするときのエラーの解決策を共有します。これは、PHP を学習するための優れた参考資料と価値があります。 PHP に興味のあるお友達は、エディターをフォローしてご覧ください
私は現在、グラフィックスとテキストを送信するためのインターフェイスで WeChat パブリック アカウントを開発しています。配列要素を XMLstring
foreach ($itemArr as $key => $value){ $items .= "<item> <Title><![CDATA[$value['title']]]></Title> <Description><![CDATA[[$value['description']]]></Description> <PicUrl><![CDATA[$value['picUrl']]]></PicUrl> <Url><![CDATA[$value['url']]]></Url> </item>"; }
に結合する必要があります。 結果は以下のようなエラーメッセージでした:
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in D:\hhp\wamp\www\weixin\wx_sample.php on line 146
エラーメッセージからはシングルクォーテーションに問題があるようで思い切って削除したところエラーは出なくなりました。しかし、混乱しているのですが、添え字が文字列である配列要素には引用符を追加する必要はありませんか? PHPの公式マニュアルで配列の説明を確認してみたら、こんな文章がありました
$arr = array('fruit' => 'apple', 'veggie' => 'carrot'); // This will not work, and will result in a parse error, such as: // Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING' // This of course applies to using superglobals in strings as well print "Hello $arr['fruit']"; print "Hello $_GET['foo']";
通常の配列変数やスーパーグローバル配列変数がダブルクォーテーションで囲まれている場合の記述方法が2つあります。 Index 文字列の配列要素の場合、インデックス文字列に一重引用符を追加しないでください。では、正しい書き方は何でしょうか?そこで私は公式マニュアルを検索し続け、次の記述を見つけました:
$arr = array('fruit' => 'apple', 'veggie' => 'carrot'); // This defines a constant to demonstrate what's going on. The value 'veggie' // is assigned to a constant named fruit. define('fruit', 'veggie'); // The following is okay, as it's inside a string. Constants are not looked for// within strings, so no E_NOTICE occurs hereprint "Hello $arr[fruit]"; // Hello apple// With one exception: braces surrounding arrays within strings allows constants// to be interpretedprint "Hello {$arr[fruit]}"; // Hello carrotprint "Hello {$arr['fruit']}"; // Hello apple $arr = array('fruit' => 'apple', 'veggie' => 'carrot'); // This defines a constant to demonstrate what's going on. The value 'veggie' // is assigned to a constant named fruit. define('fruit', 'veggie'); // The following is okay, as it's inside a string. Constants are not looked for // within strings, so no E_NOTICE occurs here print "Hello $arr[fruit]"; // Hello apple // With one exception: braces surrounding arrays within strings allows constants // to be interpreted print "Hello {$arr[fruit]}"; // Hello carrot print "Hello {$arr['fruit']}"; // Hello apple
正しい書き方は 3 つあります:
インデックス文字列の最初の書き方では、引用符が追加されません。つまり、 get 文字列フルーツをインデックスとする配列要素を取得し、apple を出力します。
インデックス文字列を記述する 2 番目の方法では引用符を追加せず、同時に配列変数を中かっこ { } で囲みます。このとき、fruit は実際には定数を表します。したがって、フルーツ定数値をインデックスとする配列要素を取得することになります。フルーツ定数の値は野菜なので、ニンジンが出力されます。
の 3 番目の書き方は、文字列を一重引用符で囲み、配列変数を中かっこ { } で囲むことです。これは、文字列のフルーツをインデックスとする配列要素を取得することを意味します。 後で検索を続けて、次のコードを見つけました: // Incorrect. This works but also throws a PHP error of level E_NOTICE because
// of an undefined constant named fruit
//
// Notice: Use of undefined constant fruit - assumed 'fruit' in...
print $arr[fruit]; // apple
<pre name="code" class="php">print $arr['fruit']; // apple
// This defines a constant to demonstrate what's going on. The value 'veggie'// is assigned to a constant named fruit.define('fruit', 'veggie');// Notice the difference nowprint $arr[fruit]; // carrot
print $arr['fruit']; // apple
結論:
1. 配列変数が二重引用符で囲まれていない場合、
(1) インデックス文字列と一重引用符は文字列自体を表します<pre name="code" class="php">$arr['fruit']
$arr[fruit]
2. 配列変数が二重引用符で囲まれている場合、
(1) 一重引用符のないインデックス文字列は文字列そのものを表します"$arr[fruit]"
"{$arr[fruit]}"
(3) インデックス文字列と一重引用符、配列変数と中括弧は文字列自体を表します
<pre name="code" class="php"><pre name="code" class="php">"{$arr['fruit']}"
<pre name="code" class="php"><pre name="code" class="php">"$arr['fruit']"
PHPで二重引用符で囲まれた配列要素にアクセスする際のエラーの解決策をベースにした上記の記事は、すべて共有された内容です。編集者の方、参考になれば幸いです! !
おすすめ記事:PHP配列の低メモリ使用率の詳細な分析
PHP配列アクセスインターフェースArrayAccessのサンプル詳細説明
以上がPHP の二重引用符で配列要素にアクセスするときのエラーの解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。