php中的字符串长度棘手的字符串

时间:2012-02-08 11:06:13

标签: php string

我有两个像这样的字符串

$text = 'Abcdef';
$text[7] = 'Ghijk';

当我按$text的长度

echo strlen($text);

答案是8。任何人都可以描述它是怎么回事?

4 个答案:

答案 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