note 120170 added to function.strtok
| From: | charlie dot ded at orange dot fr | Date: | Tue, 15 Nov 2016 13:41:23 +0000 |
| Subject: | note 120170 added to function.strtok | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-207110@lists.php.net to get a copy of this message | ||
@maisuma you invert paramaters of explode() and strtok() functions, your code does not do what you
expect.
You expect to read the input string token after token so equivalent code for strtok() is
arra_filter(explode()) because explode() return lines of empty string when several delimiters are
contiguous in the read string, for example 2 whitespaces between.
In fact strtok() is much faster (x2 at least) than arra_filter(explode()) if the read string
contains several contiguous delimiters ,
it is slower if the read string contains one and only one delimiter between tokens.
<?php
$repeat = 10;
$delimiter = ':';
$str=str_repeat('foo:',$repeat);
$timeStrtok=microtime(TRUE);
$token = strtok($str, $delimiter);
while($token!==FALSE){
//echo $token . ',';
$token=strtok($delimiter);
}
$timeStrtok -=microtime(TRUE);
$timeExplo=microtime(TRUE);
$arr = explode($delimiter, $str);
//$arr = array_filter($arr);
$timeExplo -=microtime(TRUE);
//print_r($arr);
$X = 1000000; $unit = 'microsec';
echo PHP_EOL . ' explode() : ' . -$timeExplo . ' ' .$unit .PHP_EOL . '
strtok() : ' . -$timeStrtok . ' ' . $unit .PHP_EOL;
$timeExplo=round(-$timeExplo*$X);
$timeStrtok=round(-$timeStrtok*$X);
echo PHP_EOL . ' explode() : ' . $timeExplo . ' ' .$unit .PHP_EOL . '
strtok() : ' . $timeStrtok . ' ' . $unit .PHP_EOL;
echo ' ratio explode / strtok : ' . round($timeExplo / $timeStrtok,1) . PHP_EOL;
?>
----
Server IP: 72.52.91.14
Probable Submitter: 80.13.52.247
----
Manual Page -- http://php.net/manual/en/function.strtok.php
Edit -- https://master.php.net/note/edit/120170
Del: integrated -- https://master.php.net/note/delete/120170/integrated
Del: useless -- https://master.php.net/note/delete/120170/useless
Del: bad code -- https://master.php.net/note/delete/120170/bad+code
Del: spam -- https://master.php.net/note/delete/120170/spam
Del: non-english -- https://master.php.net/note/delete/120170/non-english
Del: in docs -- https://master.php.net/note/delete/120170/in+docs
Del: other reasons-- https://master.php.net/note/delete/120170
Reject -- https://master.php.net/note/reject/120170
Search -- https://master.php.net/manage/user-notes.php