在这个例子中,长度变量发生了什么,PHP

时间:2016-10-04 22:27:47

标签: php variables string-length

也许这是一个愚蠢的问题,但我不了解变量的长度,每一步中发生了什么?

$text = 'John';
$text[10] = 'Doe';

echo strlen($text);
//output will be 11

为什么var_dump($text)会显示string(11) "John D"?为什么它不是全名John Doe

有人可以解释这一刻吗?

3 个答案:

答案 0 :(得分:5)

// creates a string John
$text = 'John';

// a string is an array of characters in PHP
// So this adds 1 character from the beginning of `Doe` i.e. D
// to occurance 10 of the array $text
// It can only add the 'D' as you are only loading 1 occurance i.e. [10]
$text[10] = 'Doe';

echo strlen($text);  // = 11

echo $text; // 'John      D`
// i.e. 11 characters

要做你想做的事情,请使用像这样的连接

$text = 'John';
$text .= ' Doe';

如果你真的想要所有的空间

$text = 'John';
$text .= '      Doe';

或者

$text = sprintf('%s      %s', 'John', 'Doe');

答案 1 :(得分:0)

字符串可以作为数组访问,这是你用$ text [10]做的。由于内部工作原因,所有classList确实将第11个字符设置为' D'。

您将不得不使用其他类型的字符串连接。

documentation explains

答案 2 :(得分:0)

可用数据

// Assigns john as a string in variable text
$text = 'John';
$text[10] = 'Doe';

解决方案的概念

这里的要点是理解字符串可以被视为一个数组[在这种情况下是字符数组]。

要理解这一点,只需运行:

echo $text[0]

在您的浏览器中,您会注意到输出是 "J"

运行

同样,如果您echo($text[1], $text[2], $text[3]),输出将分别为"o"、"h"、"n"

现在我们 ae 在这里做的是分配 $text[10] as "SAM"。 它将 SAM 视为字符数组(不同的数组)并将 "S" 分配给 $text[10]

所以发生的情况是从 4 到 9 的所有索引都是空白的(在浏览器上打印时为空白)。并且由于任何数组的索引都是从 0 开始的,所以数组的总长度为 11(0, 1, 2,..., 10 个索引)。

解释

想象一下:

[$variable[$index] = $value]
$text[0] = J
$text[1] = o
$text[2] = h
$text[3] = n
$text[4] = 
$text[5] = 
$text[6] = 
$text[7] = 
$text[8] = 
$text[9] = 
$text[10] = S

echo $text;
// output in browser: "John D";
// actual output: "John      D";
echo strlen($text);
// output: 11