ホームページ > バックエンド開発 > PHPチュートリアル > PHP の二重引用符で配列要素にアクセスするときのエラーに対処する方法

PHP の二重引用符で配列要素にアクセスするときのエラーに対処する方法

php中世界最好的语言
リリース: 2023-03-26 20:34:02
オリジナル
2010 人が閲覧しました

今回は、PHP で二重引用符で囲まれた配列要素にアクセスするときのエラーの処理方法について説明します。PHP で二重引用符で囲まれた配列要素にアクセスするときの注意事項とは何ですか。実際のケースを見てみましょう。

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 '' (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
ログイン後にコピー
通常の状況では、配列変数が二重引用符で囲まれていない場合、Apple がインデックス文字列に一重引用符を追加しても、出力結果は一貫していますが、定義するときは、 a 文字列フルーツと同じ名前の定数にインデックスを付ける場合、一重引用符なしのインデックス文字列の出力結果はキャロットになりますが、一重引用符を使用するとリンゴのままになります。

結論:

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

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

<pre name="code" class="php">$arr['fruit']
ログイン後にコピー
(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['fruit']}"
ログイン後にコピー

(4) インデックス文字列は一重引用符で囲まれ、配列変数が中括弧で囲まれていない場合はエラーです 書き方、エラー報告: 解析エラー: 解析エラー、T_STRING' または T_VARIABLE' または T_NUM_STRING' を期待しています

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

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

だと思いますこの記事の事例を読んだ後、あなたはその方法をマスターしました。もっとエキサイティングな内容に注目してください。 php 中国語 Web サイトのその他の関連記事! 推奨書籍:

PHP で XML を解析して SQL ステートメントを生成する手順の詳細な説明

PHP で QQ ログインを実装する手順の詳細な説明

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

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