PHP中用下标符号[]去读取字符串的逻辑
http://blog.csdn.net/topasstem8/article/details/39694039

PHP中 [(下标)] 符号不仅可以应用于数组和对象,还可以应用于字符串,如果不注意很容易出错。
比如获取一个网络接口,正常情况下会返回一个数组结构的json,经过解析之后结果为:

array(  
'content' => 'This is returned by interface'  
)  

我们获取到接口数据之后,通过以下语句来判断content是否有值的话,就会有问题:

if (!empty($result['content']))  
    echo $result['content'];  

因为但是如果服务器异常,可能会返回下面的HTML字符串:

<html>  
    <head>  
        <title>505</title>  
    </head>  
    <body>  
        Service Internal Error  
    </body>  
</html>  

这种情况下,经过json_decode解析我们如果使用上面的语句,就会获得一个 < 字符,这是为什么呢?
我们来看一下 PHP5.2.5 中 [] 作用于字符串的逻辑:

-略-

上面源码中:dim 表示下标;

首先,判断是不是[]操作符中没有下标,如果是就报错。
因为没有下标的话,是要新增一个字数组,这对于字符串来说肯定要出错。
然后判断下标是不是数字型的,请注意 1234 和 "1234" ,PHP都会认为是数字型。
如果不是数字类型的,就会将下标转换为数字型,这种转换规则下,字符串都会被转换为0;

所以,上面那个例子中,访问下标为 content 的数据时,就会返回下标为0的数据,也就是 < 字符。
所以,严谨地来说,访问一个数组下标的时候,要首先判断一下这个类型是不是数组类型,才能保证万无一失。

关于 GitHub 导航 部门 反馈

提示:`/chn.php`入口数据仅为演示功能,不构成任何交易凭证,也不承担相关风险和责任!

Copyright © 2011-2018 xxxxx.com All rights reserved. 粤ICP备07020797号.

Run:23.115/47.836(ms); 6(sql)/2.593(MB); comm:news/detail; Upd:2020-10-28 02:17:07