최근에 저는 그래픽과 텍스트를 전송하기 위한 인터페이스에서 배열 요소를 XML 문자열로 연결해야 합니다. 이 기사에서는 주로 PHP 큰따옴표로 배열 요소에 액세스할 때 발생하는 오류에 대한 해결책을 공유합니다. 좋은 참고자료가 많아서 모든 분들께 도움이 되었으면 좋겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.
foreach ($itemArr as $key => $value){ $items .= "<item> <Title><![CDATA[$value['title']]]></Title> <Description><![CDATA[[$value['description']]]></Description> <PicUrl><![CDATA[$value['picUrl']]]></PicUrl> <Url><![CDATA[$value['url']]]></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 중국어 웹사이트의 기타 관련 기사를 참조하세요!