>  기사  >  백엔드 개발  >  PHP 큰따옴표에서 배열 요소에 액세스할 때 발생하는 오류에 대한 해결 방법 PHP 기술

PHP 큰따옴표에서 배열 요소에 액세스할 때 발생하는 오류에 대한 해결 방법 PHP 기술

jacklove
jacklove원래의
2018-06-28 17:39:031435검색

아래 편집기에서는 PHP 큰따옴표로 배열 요소에 액세스할 때 발생하는 오류에 대한 해결 방법을 공유할 것입니다. 좋은 참고 값이 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집기를 따라 살펴보겠습니다

최근에 그래픽과 텍스트를 전송하기 위한 인터페이스에서 배열 요소를 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;]";

일반 배열 변수나 슈퍼 전역 배열 변수가 double에 포함될 때 두 가지 잘못된 작성 방법이 있습니다. quote 인덱스가 문자열인 배열 요소를 참조할 때 인덱스 문자열에 작은따옴표를 추가하면 안 됩니다. 그렇다면 올바른 작성 방법은 무엇입니까? 그래서 공식 매뉴얼을 계속 검색한 결과 다음과 같은 내용을 발견했습니다.

$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

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

일반적인 상황에서 배열 변수가 큰따옴표로 묶이지 않으면 출력 결과는 인덱스 문자열에 작은 따옴표를 추가합니다. 마찬가지입니다. 그러나 인덱스 문자열인 Fruit과 동일한 이름의 상수가 정의되면 작은 따옴표가 없는 인덱스 문자열의 출력 결과는 당근이 되지만 작은 따옴표를 사용하면 여전히 사과입니다. .

결론:

1. 배열 변수를 큰따옴표로 묶지 않은 경우

(1) 작은따옴표를 더한 인덱스 문자열은 문자열 자체를 나타냅니다

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

( 2) 작은따옴표가 없는 인덱스 문자열은 상수를 나타냅니다. 상수가 정의되지 않은 경우 작은따옴표를 추가하는 것과 동일하게 문자열로 구문 분석됩니다.

$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) 색인 문자 문자열은 작은따옴표로 묶여 있고 배열 변수는 중괄호로 묶이지 않습니다. 이는 잘못된 쓰기 방법입니다. 오류가 보고됩니다. 구문 분석 오류, 구문 분석 오류, 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/언어.types.array.php

위 글은 솔루션을 기반으로 합니다. PHP에서 큰따옴표로 묶인 배열 요소에 액세스할 때 발생하는 오류는 모두 편집자가 공유한 내용입니다. 참조할 수 있기를 바라며, PHP 중국어 웹사이트를 지원해 주시길 바랍니다.

당신이 관심을 가질 만한 기사:

php 1차원 배열에서 값 요소를 삭제하는 방법 PHP Tips

PHP로 이미지의 역색상 처리 기능 구현하기 PHP Tips

PHP 기술을 설명하기 위한 pecl 방법을 통한 PHP 설치 확장의 예


위 내용은 PHP 큰따옴표에서 배열 요소에 액세스할 때 발생하는 오류에 대한 해결 방법 PHP 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.