Что произошло с переменной длины в этом примере, переполнение стека

Может быть, это глупый вопрос, но я не понимаю, что происходит с длиной переменной, что происходит на каждом этапе?

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

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

Почему будет var_dump($text)дисплей string(11) "John D"? Почему это не будет полное имя John Doe?

Может кто-нибудь объяснить этот момент?

0

Решение

// 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');
5

Другие решения

К строкам можно обращаться как к массивам, что вы и делаете с $ text [10]. Из-за внутренней работы все $text[10] = 'Doe'; do устанавливает 11-й символ в ‘D’.

Вам придется использовать какой-либо другой вид конкатенации строк.

http://php.net/manual/en/function.sprintf.php

0

По вопросам рекламы [email protected]