• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    基于php双引号中访问数组元素报错的解决方法

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

    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']"; 

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

    $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

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

    第一种写法索引字符串不添加任何引号,此时表示获取索引为字符串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" 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,但是当定义一个与索引字符串fruit同名的常量时,未加单引号的索引字符串输出结果就成了carrot,而加上单引号还是apple。

    结论:

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

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

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

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

    $arr[fruit] 

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

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

    "$arr[fruit]" 

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

    "{$arr[fruit]}" 

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

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

    (4) 索引字符串加上单引号且数组变量未加上花括号,为错误写法,报错:Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'

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

    附:php手册数组说明URL

    http://php.net/manual/zh/language.types.array.php

    以上这篇基于php双引号中访问数组元素报错的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • PHP数组式访问接口ArrayAccess用法分析
    • php访问数组最后一个元素的函数end()用法
    • PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
    • PHP如何使用array_unshift()在数组开头插入元素
    • PHP数组Key强制类型转换实现原理解析
    • PHP读取远程txt文档到数组并实现遍历
    • PHP基于array_unique实现二维数组去重
    • PHP二维数组分页2种实现方法解析
    • PHP数组访问常用方法解析
    上一篇:PHP运用foreach神奇的转换数组(实例讲解)
    下一篇:php 删除一维数组中某一个值元素的操作方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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