PHP の二重引用符で配列要素にアクセスするときのエラーの解決策

韦小宝
リリース: 2023-03-19 20:24:02
オリジナル
1420 人が閲覧しました

以下のエディターは、PHP で二重引用符で囲まれた配列要素にアクセスするときのエラーの解決策を共有します。これは、PHP を学習するための優れた参考資料と価値があります。 PHP に興味のあるお友達は、エディターをフォローしてご覧ください

私は現在、グラフィックスとテキストを送信するためのインターフェイスで WeChat パブリック アカウントを開発しています。配列要素を XMLstring

foreach ($itemArr as $key => $value){ 
  $items .= "<item> 
  <Title><![CDATA[$value[&#39;title&#39;]]]></Title>  
  <Description><![CDATA[[$value[&#39;description&#39;]]]></Description> 
  <PicUrl><![CDATA[$value[&#39;picUrl&#39;]]]></PicUrl> 
  <Url><![CDATA[$value[&#39;url&#39;]]]></Url> 
  </item>"; 
}
ログイン後にコピー

に結合する必要があります。 結果は以下のようなエラーメッセージでした:

Parse error: syntax error, unexpected &#39;&#39; (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(&#39;fruit&#39; => &#39;apple&#39;, &#39;veggie&#39; => &#39;carrot&#39;); 
// This will not work, and will result in a parse error, such as: 
// Parse error: parse error, expecting T_STRING&#39; or T_VARIABLE&#39; or T_NUM_STRING&#39; 
// This of course applies to using superglobals in strings as well 
print "Hello $arr[&#39;fruit&#39;]"; 
print "Hello $_GET[&#39;foo&#39;]";
ログイン後にコピー

通常の配列変数やスーパーグローバル配列変数がダブルクォーテーションで囲まれている場合の記述方法が2つあります。 Index 文字列の配列要素の場合、インデックス文字列に一重引用符を追加しないでください。では、正しい書き方は何でしょうか?そこで私は公式マニュアルを検索し続け、次の記述を見つけました:

$arr = array(&#39;fruit&#39; => &#39;apple&#39;, &#39;veggie&#39; => &#39;carrot&#39;);

// This defines a constant to demonstrate what&#39;s going on. The value &#39;veggie&#39;
// is assigned to a constant named fruit.
define(&#39;fruit&#39;, &#39;veggie&#39;);

// The following is okay, as it&#39;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[&#39;fruit&#39;]}"; // Hello apple

$arr = array(&#39;fruit&#39; => &#39;apple&#39;, &#39;veggie&#39; => &#39;carrot&#39;);

// This defines a constant to demonstrate what&#39;s going on. The value &#39;veggie&#39;
// is assigned to a constant named fruit.
define(&#39;fruit&#39;, &#39;veggie&#39;);

// The following is okay, as it&#39;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[&#39;fruit&#39;]}"; // 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 &#39;fruit&#39; in... 
print $arr[fruit];  // apple 
<pre name="code" class="php">print $arr[&#39;fruit&#39;]; // apple
ログイン後にコピー
// This defines a constant to demonstrate what&#39;s going on. The value &#39;veggie&#39;// is assigned to a constant named fruit.define(&#39;fruit&#39;, &#39;veggie&#39;);// Notice the difference nowprint $arr[fruit]; // carrot

print $arr[&#39;fruit&#39;]; // apple
ログイン後にコピー
通常の状況では、配列変数が二重引用符で囲まれていない場合、Apple がインデックス文字列に一重引用符を追加しても、出力結果は一貫していますが、定義するときは、 a 文字列フルーツと同じ名前の定数にインデックスを付ける場合、一重引用符なしのインデックス文字列の出力結果はキャロットになりますが、一重引用符を使用するとリンゴのままになります。

結論:

1. 配列変数が二重引用符で囲まれていない場合、

(1) インデックス文字列と一重引用符は文字列自体を表します

<pre name="code" class="php">$arr[&#39;fruit&#39;]
ログイン後にコピー
(2) インデックスstring is not 単一引用符の追加は定数を表します。定数が定義されていない場合、その定数は文字列に解析されます。これは単一引用符を追加することと同じです。

$arr[fruit]
ログイン後にコピー

2. 配列変数が二重引用符で囲まれている場合、

(1) 一重引用符のないインデックス文字列は文字列そのものを表します

"$arr[fruit]"
ログイン後にコピー
(2) 配列変数と中括弧は同じ名前を表します文字列定数として

"{$arr[fruit]}"
ログイン後にコピー

(3) インデックス文字列と一重引用符、配列変数と中括弧は文字列自体を表します

<pre name="code" class="php"><pre name="code" class="php">"{$arr[&#39;fruit&#39;]}"
ログイン後にコピー

(4) インデックス文字列と一重引用符、および中括弧のない配列変数はエラーです書き方、エラー報告: Parse error: parse error, Expected T_STRING' or T_VARIABLE' or T_NUM_STRING'

<pre name="code" class="php"><pre name="code" class="php">"$arr[&#39;fruit&#39;]"
ログイン後にコピー

PHPで二重引用符で囲まれた配列要素にアクセスする際のエラーの解決策をベースにした上記の記事は、すべて共有された内容です。編集者の方、参考になれば幸いです! !

おすすめ記事:

PHP配列の低メモリ使用率の詳細な分析


PHP配列の長さを取得する方法

PHP配列アクセスインターフェースArrayAccessのサンプル詳細説明

以上がPHP の二重引用符で配列要素にアクセスするときのエラーの解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!