2013-03-02 4 views
4

Использует ли strlen количество байтов в строке путем итерации по строке или просто возвращает значение уже рассчитанной длины строки из индекса?Какова эффективность strlen() в PHP?

Причина моего вопроса в том, что у меня есть выбор для хранения предварительно вычисленных значений очень длинных строк для скоростного скрипта, или я мог бы просто использовать функцию strlen и сохранить время кодирования.

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

UPDATE

Смотрите мой тест ниже.

+1

Это O (1) - это * не * как строка C, которая является O (n). – 2013-03-02 07:02:21

+1

Я не могу найти документацию, подтверждающую его, но я уверен, что это заранее рассчитано. Строки PHP не изменяются, как строки C. – Barmar

+0

PHP с открытым исходным кодом, вы можете проверить код .... – Barmar

ответ

5

Винт это, я сделал тест:

<?php 
$shortstring='hello'; 

$longstring='long'; 
for($run=0;$run<100000;$run++) 
    $longstring.='dsffghdgfhdsda'.rand(1000,2000); 

$time=microtime(true); 
for($run=0;$run<100000000;$run++) 
    $temp=strlen($shortstring); 
$time=microtime(true)-$time; 

echo "strlen on short string took $time seconds\n"; 

$time=microtime(true); 
for($run=0;$run<100000000;$run++) 
    $temp2=strlen($longstring); 
$time=microtime(true)-$time; 

echo "strlen on long string took $time seconds\n"; 

Результаты

strlen on short string took 12.508891820908 seconds 
strlen on long string took 11.897696971893 seconds 

Это, очевидно, не перебирать строки, но возвращает предварительно индексируется значение. Никакой разницы в скорости.

+0

+1 для контрольных показателей. – deceze

Смежные вопросы