我有两个像这样的字符串
$text = 'Abcdef';
$text[7] = 'Ghijk';
当我按$text
的长度
echo strlen($text);
答案是8
。任何人都可以描述它是怎么回事?
答案 0 :(得分:2)
在PHP中,您可以访问字符串中的字符,例如数组中的项目。因此$text[7] = 'Ghijk'
在第8个位置(从0到7)添加到$text
个字符'G'
$text = 'Abcdef';
$text[7] = 'Ghijk';
var_dump($text); //outputs string(8) "Abcdef G"
答案 1 :(得分:1)
$text[7] = 'Ghijk';
在索引位置7添加“G”。因此,当您调用echo strlen($text);
时,结果将为8,因为PHP对字符串使用0索引寻址。
为了更好地理解这一点,请考虑以下代码示例:
$text = 'Abcdef';
echo($text . ' ' . strlen($text) . '<br />');
$text[7] = 'Ghijk';
echo($text . ' ' . strlen($text) . '<br />');
echo($text[7]);
这会产生
Abcdef 6
Abcdef G 8
G
关键是$text[7] = 'Ghijk';
行仅添加'G'。
答案 2 :(得分:1)
字符串在内部实现为char数组。当你执行类似$text[7] = 'Ghijk';
之类的操作时,它将第一个字符(作为其char数组)应用于新字符串,即“G”到原始字符串中的第7位,字符串中的第6位为空。因此,它长8个字符。
字符为0 =&gt;'A'6 =&gt;' '7 =&gt;'G'
答案 3 :(得分:1)
举一个更简单的例子来看看会发生什么:
$text = 'a';
$text[2] = 'boo'; // now $text is "a b"
当PHP发现我们正在访问长度为1的字符串的索引2
时(只有有效索引为0), 扩展 字符串通过添加两个空格,使它成为字符串'a '
。
接下来,索引运算符[]
处理字符串中的字符。所以你的第二个语句用b
替换第3个字符,给你a b