ホームページ >バックエンド開発 >PHPチュートリアル >PHPの二重引用符で配列要素にアクセスするときのエラーを解決する方法
最近、私は WeChat パブリック アカウントを開発しています。グラフィックやテキストを送信するためのインターフェイスでは、配列要素を XML 文字列に結合する必要があります。この記事では主に、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
エラーメッセージからは、シングルクォーテーションの問題だったようで、思い切って削除したところ、エラーは報告されませんでした。しかし、混乱しているのですが、添え字が文字列である配列要素には引用符を追加する必要はありませんか? 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 つあります:
最初の書き方では、引用符を追加せずに文字列にインデックスを付けます。これは、インデックスが配列要素である配列要素を取得することを意味します。文字列フルーツ、出力リンゴ。
インデックス文字列を記述する 2 番目の方法では、引用符を追加せず、配列変数を中かっこ { } で囲みます。このとき、fruit は実際には文字列ではなく定数を表すため、インデックス フルーツの定数値を持つ配列要素です。 定数フルーツの値は野菜なので、ニンジンが出力されます。
3 番目の書き方は、引用符で囲まれた文字列に一重引用符を追加するだけでなく、配列変数を中かっこ { } で囲むことです。これは、文字列フルーツをインデックスとする配列要素を取得し、apple を出力することを意味します。
後で検索を続けて、次のコードを見つけました:
// 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
通常の状況では、配列変数が二重引用符で囲まれていない場合、Apple がインデックス文字列に一重引用符を追加しても、出力結果は一貫していますが、定義するときは、 a 文字列フルーツと同じ名前の定数にインデックスを付ける場合、一重引用符なしのインデックス文字列の出力結果はキャロットになりますが、一重引用符を使用するとリンゴのままになります。
結論:
1. 配列変数が二重引用符で囲まれていない場合、
(1) インデックス文字列と一重引用符は文字列そのものを表します
<pre name="code" class="php">$arr['fruit']
(2) 一重引用符のないインデックス文字列は定数を表します。定数が定義されていない場合、文字列として解析されます。これは一重引用符を追加するのと同じです。
$arr[fruit]
2. 配列変数が二重引用符で囲まれている場合、
(1) 一重引用符のないインデックス文字列は文字列そのものを表します
"$arr[fruit]"
(2) 配列変数と中括弧は、同じ名前の定数を表します文字列
"{$arr[fruit]}"
(3) インデックス文字列に一重引用符を追加し、配列変数に中括弧を追加すると、文字列そのものを表します
<pre name="code" class="php"><pre name="code" class="php">"{$arr['fruit']}"
(4) インデックス文字列に一重引用符を追加し、配列変数に中括弧を追加しないことは、書き方が間違っていると、エラーが報告されます: 解析エラー: 解析エラー、T_STRING' または T_VARIABLE' または T_NUM_STRING' を期待しています
<pre name="code" class="php"><pre name="code" class="php">"$arr['fruit']"
関連推奨事項:
php は配列要素で構成される文字列を返します関数 implode()
以上がPHPの二重引用符で配列要素にアクセスするときのエラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。