ホームページ  >  記事  >  バックエンド開発  >  PHP の二重引用符で配列要素にアクセスするときのエラーの解決策 PHP スキル

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

jacklove
jackloveオリジナル
2018-06-28 17:39:031369ブラウズ

次のエディタでは、PHP の二重引用符で配列要素にアクセスするときのエラーの解決策を紹介します。これは参考になるので、皆さんのお役に立てれば幸いです。エディターをフォローして見てみましょう。

私は現在、グラフィックスとテキストを送信するための WeChat パブリック アカウントを開発しています。配列要素を XML 文字列に結合する必要があります。

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;]";

正しい書き方は 3 つあります。

##最初の

インデックス文字列の記述方法は、この時点では、インデックスが指定されている配列要素を取得することを意味します。ストリングフルーツと出力リンゴ。

インデックス文字列を記述する 2 番目の方法は、引用符を追加せず、同時に配列変数を中かっこ { } で囲みます。 、fruit 実際には文字列ではなく定数を表すため、fruit 定数値をインデックスとする配列要素を取得することになります。定数 Fruit の値は veggie なので、キャロットが出力されます。

3 番目の書き方

# は、一重引用符を追加するだけでなく、配列変数を中括弧 { } で囲んで文字列を引用することです。このように、文字列フルーツをインデックスとする配列要素を取得したい場合は、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 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

##

// 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
この場合、配列変数がダブルクォーテーションで囲まれていない場合、インデックス文字列にシングルクォーテーションが付加されているか否かに関わらず出力結果は一致しますが、インデックス文字列フルーツと同じ名前の定数が定義されている場合は、一重引用符のないインデックス文字列が表示されますが、出力はニンジンになりますが、一重引用符を追加することは依然として問題ありません。

結論:

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

(1) 一重引用符で囲まれたインデックス文字列は文字列自体を表します。 ##

// 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
#(2) 一重引用符のないインデックス文字列は、文字列そのものを表します。定数。定数が未定義の場合、文字列として解析されます。これは一重引用符を追加するのと同じです。

<pre name="code" class="php">$arr[&#39;fruit&#39;]

2. 配列変数を二重引用符で囲んだ場合、

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

$arr[fruit]

(2) 中括弧で囲まれた配列変数は文字列と同じ名前の定数を表します

"$arr[fruit]"
#(3) インデックス文字列に一重引用符を追加し、文字列そのものを表す配列変数に中括弧を追加します

#
"{$arr[fruit]}"

(4) インデックス文字列が一重引用符で囲まれており、配列変数が中括弧で囲まれていません。これは間違った書き方です: Parse というエラーが報告されます。エラー: 解析エラー、T_STRING' または T_VARIABLE' または T_NUM_STRING' を予期しています

<pre name="code" class="php"><pre name="code" class="php">"{$arr[&#39;fruit&#39;]}"

添付ファイル: PHP マニュアル配列の説明 URL

http ://php.net/manual/zh/ language.types.array. php

上記の記事は、PHP の二重引用符で配列要素にアクセスするときのエラーの解決策に基づいています。これがすべての共有内容です。編集者によるこの記事が参考になれば幸いです。また、PHP 中国語 Web サイトをサポートしていただければ幸いです。

#興味があるかもしれない記事:

php 1 次元配列の値要素を削除する方法 php ヒント

PHP は画像の逆色処理機能を実現します php スキル

##phppecl メソッドによる拡張機能のインストール例で php スキルを説明します

#

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。