#php #string
#php #строка
Вопрос:
Как узнать конец строки PHP? У меня есть одна задача: распознать длину строки без каких-либо функций. Я знаю, что все строки в PHP заканчиваются нулевым байтом (
), но я не могу знать элементы строки после последнего символа.
Например, это не сработает:
while($a[ $length]);
Как узнать длину строки без использования каких-либо функций?
Комментарии:
1. Этот нулевой байт является деталью реализации. Я не думаю, что у вас есть доступ к нулевому байту в конце. PHP — это не C. Может быть неправильно, но я не думаю, что ваш подход сработает.
2. @evilone Я сомневаюсь, что любой здравомыслящий преподаватель познакомит студентов с программированием на php всех языков.
3. Итак, лучший способ, по вашему мнению, вызывает
Uninitialized string offset
уведомления?4. Пожалуйста, докажите свое утверждение: «все строки в PHP заканчиваются нулевым байтом (» 0″)».
$string = 'abc'; $string[1] = '';
5. Почему вы не можете просто сделать
strlen($string)
?
Ответ №1:
В php строки не заканчиваются нулевым байтом. Например, $s = 'a';echo $s[1];
выдает предупреждение (вот почему вы не должны тестировать с $a[$length] == ""
помощью ). Кроме того, строки php могут содержать нулевые байты — на самом деле это байтовые массивы.
Однако вы можете использовать языковую конструкцию isset
, чтобы проверить, выдаст ли чтение значения $a[$length]
предупреждение:
$a = "abc";
for ($length = 0;isset($a[$length]);$length ) ;
echo $length; // 5
Ответ №2:
$string = 'hello';
$length = 0;
while (isset($string[$length])) {
$length ;
}
echo $length; //5
Комментарии:
1. Это не работает, если у меня есть цифра 0 в строке. Это должно быть похоже на $length = 0; while ($string[$length] !=»») { $length ; }
2. Это не имеет ничего общего с
NUL
байтом.isset($string[42])
будет иметь ту же семантику. (Как указано в документеisset
, NUL не равен NULL .)