今回は、PHP で二重引用符で囲まれた配列要素にアクセスするときのエラーの処理方法について説明します。PHP で二重引用符で囲まれた配列要素にアクセスするときの注意事項とは何ですか。実際のケースを見てみましょう。
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
エラーメッセージを見ると、シングルクォーテーションの問題のようですが、思い切って削除したところ、エラーは出なくなりました。ただし、添字が string である配列要素は引用符で囲むべきではないでしょうか? 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マニュアル配列の説明URL
だと思いますこの記事の事例を読んだ後、あなたはその方法をマスターしました。もっとエキサイティングな内容に注目してください。 php 中国語 Web サイトのその他の関連記事! 推奨書籍:
PHP で XML を解析して SQL ステートメントを生成する手順の詳細な説明以上がPHP の二重引用符で配列要素にアクセスするときのエラーに対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。