Heim  >  Artikel  >  Backend-Entwicklung  >  Lösung für Fehler beim Zugriff auf Array-Elemente in doppelten PHP-Anführungszeichen. PHP-Kenntnisse

Lösung für Fehler beim Zugriff auf Array-Elemente in doppelten PHP-Anführungszeichen. PHP-Kenntnisse

jacklove
jackloveOriginal
2018-06-28 17:39:031412Durchsuche

Der folgende Editor wird Ihnen eine Lösung für den Fehler beim Zugriff auf Array-Elemente in doppelten PHP-Anführungszeichen vorstellen. Er hat einen guten Referenzwert und ich hoffe, dass er für alle hilfreich ist. Folgen wir dem Editor, um einen Blick darauf zu werfen

Kürzlich entwickle ich ein öffentliches WeChat-Konto. In einer Schnittstelle zum Senden von Grafiken und Text muss ich Array-Elemente in einen XML-String zusammenfügen

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

Das Ergebnis war die folgende Fehlermeldung:

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

Aus der Fehlermeldung geht hervor, dass es sich um ein Problem mit einfachen Anführungszeichen handelt. Nach der entscheidenden Entfernung liegt kein Fehler vor. Ich bin jedoch verwirrt. Sollten Array-Elementen, deren Indizes Zeichenfolgen sind, nicht Anführungszeichen hinzugefügt werden? Ich habe das offizielle PHP-Handbuch gelesen, um die Beschreibung von Arrays zu lesen:

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

Es gibt zwei falsche Schreibweisen gewöhnlich Wenn eine Array-Variable oder superglobale Array-Variable in doppelte Anführungszeichen eingeschlossen ist und auf das Array-Element verweist, dessen Index eine Zeichenfolge ist, sollte die Indexzeichenfolge nicht in einfache Anführungszeichen gesetzt werden. Wie schreibt man es also richtig? Also suchte ich weiter im offiziellen Handbuch und fand die folgende Aussage:

$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

Hier sind drei richtige Schreibweisen:

Die erste Schreibweise besteht darin, die Zeichenfolge ohne Anführungszeichen zu indizieren. Zu diesem Zeitpunkt bedeutet dies, das Array-Element abzurufen, dessen Index ist die Schnurfrucht und der Ausgabeapfel.

Bei der zweiten Schreibweise der Indexzeichenfolge werden keine Anführungszeichen hinzugefügt und gleichzeitig wird die Array-Variable in ein Paar geschweifte Klammern eingeschlossen { }. Zu diesem Zeitpunkt ist Obst tatsächlich eine Konstante und keine Zeichenfolge. Es bedeutet also, dass das Array-Element, dessen Index der Fruchtkonstantenwert ist, veggie ist, sodass Karotte ausgegeben wird.

Die dritte Schreibweise besteht darin, die Zeichenfolge nicht nur durch das Hinzufügen von einfachen Anführungszeichen in Anführungszeichen zu setzen, sondern auch die Array-Variable mit einem Paar geschweifter Klammern { } zu umschließen. Auf diese Weise wird Apfel ausgegeben, wenn es darum geht, das Array-Element abzurufen, dessen Index die Zeichenfolge Fruit ist.

Später habe ich weiter gesucht und diesen Code gefunden:

// 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

Im Normalfall sind die Ausgabeergebnisse konsistent, wenn die Array-Variable nicht in doppelte Anführungszeichen gesetzt ist, unabhängig davon, ob der Indexzeichenfolge einfache Anführungszeichen hinzugefügt werden. Wenn jedoch eine Konstante mit demselben Namen wie die Indexzeichenfolge definiert wird , wird die Indexzeichenfolge ohne einfache Anführungszeichen angezeigt, aber das Hinzufügen von einfachen Anführungszeichen ist immer noch Apfel.

Schlussfolgerung:

1. Wenn die Array-Variable nicht in doppelte Anführungszeichen gesetzt ist,

(1) Die Indexzeichenfolge mit einfachen Anführungszeichen stellt die Zeichenfolge selbst dar

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

(2) Die Indexzeichenfolge ohne einfache Anführungszeichen stellt a dar Konstante: Wenn die Konstante undefiniert ist, wird sie als Zeichenfolge analysiert, was dem Hinzufügen einfacher Anführungszeichen entspricht.

$arr[fruit]

2. Wenn die Array-Variable in doppelte Anführungszeichen gesetzt ist,

( 1) Die Indexzeichenfolge ohne einfache Anführungszeichen stellt die Zeichenfolge selbst dar

"$arr[fruit]"

(2) Die Array-Variable mit geschweiften Klammern stellt die Konstante mit demselben Namen wie die Zeichenfolge dar

"{$arr[fruit]}"

(3) Die Indexzeichenfolge plus einfache Anführungszeichen und die Array-Variable plus geschweifte Klammern stellen die Zeichenfolge selbst dar

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

(4) Die Indexzeichenfolge ist in einfache Anführungszeichen gesetzt und die Array-Variable ist nicht in geschweifte Klammern eingeschlossen, was eine falsche Schreibweise ist. Der Fehler wird gemeldet: Parse-Fehler: parse Fehler, erwartet T_STRING' oder T_VARIABLE' oder T_NUM_STRING'

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

Anhang: PHP-Handbuch-Array-Beschreibungs-URL

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

Die obige Lösung basiert auf dem Fehler, der beim Zugriff auf Array-Elemente in PHP-Anführungszeichen angezeigt wird. Ich hoffe, dass dies der Fall ist Ich gebe Ihnen eine Referenz und hoffe, dass Sie die chinesische PHP-Website unterstützen.

Artikel, die Sie interessieren könnten:

php So löschen Sie ein Wertelement in einem eindimensionalen Array PHP-Tipps

PHP implementiert die inverse Farbverarbeitungsfunktion von Bildern. PHP-Kenntnisse

Ein Beispiel für die Installation von PHP-Erweiterungen über die PECL-Methode erklärt PHP-Kenntnisse

Das obige ist der detaillierte Inhalt vonLösung für Fehler beim Zugriff auf Array-Elemente in doppelten PHP-Anführungszeichen. PHP-Kenntnisse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn