note 120170 added to function.strtok

From: 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

« previous php.notes (#207110) next »