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

韦小宝
풀어 주다: 2023-03-19 20:24:02
원래의
1419명이 탐색했습니다.

아래 편집기는 PHP에서 큰따옴표로 묶인 배열 요소에 액세스할 때 발생하는 오류에 대한 해결책을 공유합니다. PHP를 학습하는 데 좋은 참고 자료이자 가치가 있으므로 모든 사람에게 도움이 되기를 바랍니다. PHP에 관심 있는 친구들은 편집자를 따라가 보세요

저는 현재 WeChat 공개 계정을 개발 중입니다. 그래픽과 텍스트를 전송하기 위한 인터페이스에서 배열 요소를 XMLstring

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;]";
로그인 후 복사

일반적인 배열 변수나 슈퍼 전역 배열 변수를 큰따옴표로 묶은 경우에는 두 가지 잘못된 작성 방법이 있습니다. index 문자열의 배열 요소에 대해 작은따옴표를 색인 문자열에 추가하면 안 됩니다. 그렇다면 올바른 작성 방법은 무엇입니까? 그래서 공식 매뉴얼을 계속 검색한 결과 다음과 같은 문구를 발견했습니다.

$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
로그인 후 복사

세 가지 올바른 작성 방법이 있습니다.

인덱스 문자열을 작성하는 첫 번째 방법은 따옴표를 추가하지 않는다는 의미입니다. getting 문자열 과일인 인덱스를 가진 배열 요소를 가져오면 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
로그인 후 복사
일반적인 상황에서 배열 변수가 큰따옴표로 묶이지 않은 경우 Apple이 인덱스 문자열에 작은따옴표를 추가하든지 출력 결과는 일관됩니다. 정의 a 문자열 과일과 동일한 이름을 가진 상수를 인덱싱할 때 작은 따옴표가 없는 인덱스 문자열의 출력 결과는 당근이 되지만 작은 따옴표를 사용하면 사과로 유지됩니다.

결론:

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에서 큰따옴표로 묶인 배열 요소에 액세스할 때 발생하는 오류에 대한 해결 방법을 기반으로 한 위 기사는 모두 공유되는 내용입니다. 편집자님. 참고할 수 있기를 바랍니다! !

추천 기사:

PHP 배열의 낮은 메모리 사용률에 대한 자세한 분석


PHP 배열의 길이를 구하는 방법

PHP 배열 액세스 인터페이스 ArrayAccess에 대한 자세한 설명 예

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!