php字符串与数组的特殊情况
2019-03-14 本文已影响0人
fadeqi
来看一个有趣的实验
实验1
<?php
$arr = array('a','b','c');
var_dump(isset($arr[1][0]));
var_dump($arr[0][0]);
var_dump($arr[1][0]);
#输出
bool(true)
string(1) "a"
string(1) "b"
没错,$arr命名是一维数组但上面代码却返回true
原因:
还记得php中的字符串可以用数组的形式进行读取操作的吗?
实验2
$var = 'qwertyui';
var_dump($var['1']);
var_dump($var[1]);
var_dump($var[2]);
#输出
string(1) "w"
string(1) "w"
string(1) "e"
但值得注意的是,php中字符串的数据结构不是数组,而是提供了一个方便的操作而已
实验3
<?php
$var = 'qwertyui';
var_dump($var['1']);
var_dump($var[1]);
var_dump($var[2]);
$var[8] = '234';
var_dump($var);
$var[12] = '987';
var_dump($var);
#输出
string(1) "w"
string(1) "w"
string(1) "e"
string(9) "qwertyui2"
string(13) "qwertyui2 9" #2和9之间有三个空格
上面例子中字符串每个字符可以看做是数组的一个元素,数组索引值从0开始;执行到$var[12] = '987' 这段代码时,由于现在的 $var 变成了'qwertyui2',长度为9,及,很明显长度不够12+1=13(索引值从0开始);所以在执行时会将$var[9],$var[10],$var[11]填充为空格,$var[12]时会把字符串'987'的第一个字符设置为值,因此输出为"qwertyui2 9" (2和9之间有三个空格)。
上面的实验1中
$arr[0][0]在被php解析的过程是这样的:
$arr[0] 指向的是字符串 'a' 然后对字符串进行操作 相当于 $str='a'; $str[0]