Определение конца строки без использования функций

#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 .)