首页 > 编程 > PHP > 正文

基于php双引号中访问数组元素报错的解决方法p

2020-03-22 19:15:17
字体:
来源:转载
供稿:网友
下面小编就为大家分享一篇基于php双引号中访问数组元素报错的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

最近在做微信公众号开发,在一个发送图文接口中,需要把数组元素拼接在XML字符串

foreach ($itemArr as $key = $html' target='_blank'>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 ] 

这里给出了两种错误的写法,当一个普通数组变量或超全局数组变量包含在双引号中时,引用索引为字符串的数组元素,索引字符串不应该再添加单引号。那正确的写法是怎样的呢?于是我继续查找官方手册,找到如下说法:

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

这里给出了三种正确的写法:

第一种写法索引字符串不添加任何引号,此时表示获取索引为字符串fruit的数组元素,输出apple。

第二种写法索引字符串也没有添加任何引号,同时将数组变量用一对花括号{ }给包了起来,此时fruit实际上表示一个常量,而不是一个字符串,因此表示获取索引为fruit常量值的数组元素,常量fruit的值是veggie,所以输出carrot。

第三种写法是引用字符串不但添加了单引号,同时也将数组变量用一对花括号{ }给包了起来,此时表示获取索引为字符串fruit的数组元素,输出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 fruit in... print $arr[fruit]; // apple  pre name= code >

// 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]; // carrotprint $arr[ fruit // apple

在正常情况下,数组变量没有被双引号包围时,是否给索引字符串加上单引号输出结果都一致时apple,但是当定义一个与索引字符串fruit同名的常量时,未加单引号的索引字符串输出结果就成了carrot,而加上单引号还是apple。

结论:

1. 数组变量未用双引号包括时,

(1) 索引字符串加单引号表示字符串本身

 pre name= code >

(2)索引字符串未加单引号表示常量,当常量未定义时则解析为字符串,等效于加上单引号。

$arr[fruit]

2. 数组变量用双引号包括时,

(1) 索引字符串不加单引号表示字符串本身

 $arr[fruit] 

(2) 数组变量加上花括号表示与字符串同名常量

 {$arr[fruit]} 

(3) 索引字符串加上单引号且数组变量加上花括号表示字符串本身

 pre name= code >

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表