длина строки хитрой строки в php - PullRequest
1 голос
/ 08 февраля 2012

У меня есть две строки, как это

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

Когда я беру длину $text

echo strlen($text);

Ответ 8. Может ли какое-нибудь тело описать, как оно?

Ответы [ 4 ]

2 голосов
/ 08 февраля 2012

В PHP вы можете получить доступ к символам в строке, как к элементам в массиве. Так что $text[7] = 'Ghijk' добавьте к $text символ 'G' на 8-й позиции (от нуля до семи)

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

var_dump($text); //outputs string(8) "Abcdef G"
1 голос
/ 08 февраля 2012

Возьмем более простой пример, чтобы увидеть, что происходит:

$text = 'a';
$text[2] = 'boo'; // now $text is "a b"

Когда PHP видит, что мы обращаемся к индексу 2 строки, длина которой равна 1 (только допустимый индекс равен 0), он расширяет строку, добавляя два пробела, поэтому она делает строку 'a '.

Далее оператор индекса [] работает с символами в строке.Таким образом, ваше второе утверждение заменяет 3-й символ на b, давая вам a b

1 голос
/ 08 февраля 2012

Строки внутренне реализованы как массивы символов. Когда вы делаете что-то вроде $text[7] = 'Ghijk';, он применяет первый символ (как массив символов) в новой строке, то есть «G» на 7-е место в исходной строке, 6-е место в строке пусто. Таким образом, делая его длиной 8 символов.

символы: 0 => 'A' 6 => '' 7 => 'G'

1 голос
/ 08 февраля 2012

$text[7] = 'Ghijk'; добавляет 'G' в позиции индекса 7. Таким образом, когда вы вызываете 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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...