php字符串与数组的特殊情况

来看一个有趣的实验


实验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]

posted @ 2019-03-18 10:56  muadog  阅读(276)  评论(0编辑  收藏  举报