>백엔드 개발 >PHP 튜토리얼 >PHP 큰따옴표로 배열 요소에 액세스할 때 오류를 해결하는 방법

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

小云云
小云云원래의
2018-02-02 09:54:171435검색

최근에 저는 그래픽과 텍스트를 전송하기 위한 인터페이스에서 배열 요소를 XML 문자열로 연결해야 합니다. 이 기사에서는 주로 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

오류 메시지를 보면 작은따옴표 문제인 것 같아 과감하게 삭제한 후에도 오류가 보고되지 않았습니다. 그런데 혼란스럽습니다. 아래 첨자가 문자열인 배열 요소에 따옴표를 추가하면 안 되나요? 배열에 대한 설명을 확인하기 위해 공식 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']";

일반적인 배열 변수나 슈퍼 전역 배열 변수를 큰따옴표로 묶은 경우에는 두 가지 잘못된 작성 방법이 있습니다. 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

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

첫 번째 작성 방법은 따옴표를 추가하지 않고 문자열에 색인을 생성합니다. 문자열 과일. , 사과를 출력합니다.

인덱스 문자열을 작성하는 두 번째 방법은 따옴표를 추가하지 않고 배열 변수를 중괄호 { } 쌍으로 묶는 것입니다. 이때 과일은 실제로 문자열이 아닌 상수를 나타내므로 index 과일이라는 상수 값을 갖는 배열 요소입니다. 상수 과일의 값은 야채이므로 당근이 출력됩니다.

세 번째 작성 방법은 인용된 문자열에 작은따옴표를 추가하는 것뿐만 아니라 배열 변수를 중괄호 { }로 묶는 것입니다. 이는 인덱스가 문자열 과일인 배열 요소를 가져와 사과를 출력하는 것을 의미합니다.

나중에 계속 검색하여 다음 코드 조각을 발견했습니다.

// 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 문자열 Fruit과 동일한 이름을 가진 상수를 인덱싱할 때 작은 따옴표가 없는 인덱스 문자열의 출력 결과는 carrot가 되지만 작은 따옴표를 사용하면 apple로 유지됩니다.

결론:

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

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

<pre name="code" class="php">$arr['fruit']

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

$arr[fruit]

2. 배열 변수를 큰따옴표로 묶은 경우

(1) 작은따옴표가 없는 인덱스 문자열은 문자열 자체를 나타냅니다.

"$arr[fruit]"

(2) 배열 변수와 중괄호는 다음과 같은 이름의 상수를 나타냅니다. the string

"{$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는 배열 요소로 구성된 문자열을 반환합니다. 함수 implode()

배열 요소를 삭제하는 PHP 메서드의 네 가지 예

PHP 다차원 배열 요소 작업 클래스 메서드에 대한 자세한 설명

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

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