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

韦小宝
Freigeben: 2023-03-19 20:24:02
Original
1475 Leute haben es durchsucht

Der folgende Editor wird Ihnen eine Lösung für den Fehler beim Zugriff auf Array-Elemente in doppelten PHP-Anführungszeichen geben. Er bietet eine gute Referenz und ist für das Erlernen von PHP hilfreich. Freunde, die sich für PHP interessieren, sollten dem Editor folgen, 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 XMLString zusammenfügen In

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>"; 
}
Nach dem Login kopieren

wird das Ergebnis wie folgt gemeldet 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
Nach dem Login kopieren

Beurteilung aus der Fehlermeldung Es handelte sich um ein Problem mit einfachen Anführungszeichen. Nach der entscheidenden Entfernung trat kein Fehler auf. 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. Es gibt einen Absatz wie diesen:

$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;]";
Nach dem Login kopieren

Es gibt zwei falsche Schreibweisen, wenn eine gewöhnliche Array-Variable oder eine superglobale Array-Variable enthalten ist in einem Double Wenn in Anführungszeichen eingeschlossen, wird das Array-Element, dessen Index eine Zeichenfolge ist, in Anführungszeichen gesetzt, und die Indexzeichenfolge sollte 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
Nach dem Login kopieren

Hier sind drei richtige Schreibweisen:

Die erste -Methode zum Schreiben der Indexzeichenfolge fügt keine Anführungszeichen hinzu. Dies bedeutet, dass das Array-Element, dessen Index die Zeichenfolgenfrucht ist, abgerufen wird.

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
Nach dem Login kopieren
// 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
Nach dem Login kopieren

Unter normalen Umständen, wenn die Array-Variable nicht in doppelte Anführungszeichen gesetzt ist, ob ein einzelnes hinzugefügt werden soll zur Indexzeichenfolge Die Ausgabeergebnisse der Anführungszeichen sind die gleichen wie bei Apfel. Wenn jedoch eine Konstante mit demselben Namen wie die Indexzeichenfolge Frucht definiert wird, wird das Ausgabeergebnis der Indexzeichenfolge ohne einfache Anführungszeichen zu Karotte, jedoch mit einfachen Anführungszeichen Anführungszeichen, es 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;]
Nach dem Login kopieren

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

$arr[fruit]
Nach dem Login kopieren

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

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

"$arr[fruit]"
Nach dem Login kopieren

(2) Fügen Sie der Array-Variablen geschweifte Klammern hinzu, um eine Konstante mit demselben Namen wie die Zeichenfolge anzugeben

"{$arr[fruit]}"
Nach dem Login kopieren

(3) Fügen Sie einfache Anführungszeichen hinzu Indexzeichenfolge und fügen Sie geschweifte Klammern zur Array-Variablen hinzu. Die Klammern stellen die Zeichenfolge selbst dar

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

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

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

Der obige Artikel basiert auf der Lösung für Der Fehler beim Zugriff auf Array-Elemente in doppelten Anführungszeichen in PHP. Dies ist der gesamte vom Editor geteilte Inhalt. Ich hoffe, er kann Ihnen einen Hinweis geben. !

Empfohlene Artikel:

Detaillierte Analyse der geringen Speicherauslastung von PHP-Arrays

So erhalten Sie die Länge eines PHP-Arrays

Detailliertes Beispiel der PHP-Array-Zugriffsschnittstelle ArrayAccess

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!