<?php
function pcre_stristr($raw,$str,$pos=false){
$r = '';
if($raw!='' && $str!=''){
$str = (string) $str;
$tmp = preg_split('/'.preg_quote($str,'/').'/su',$raw,2,PREG_SPLIT_OFFSET_CAPTURE);
if(count($tmp)==2){
if($pos){
$r = $tmp[0][0];
}
else{
if($tmp[0][0]==''){
$r = $raw;
}
else{
$r = substr($raw,strlen($tmp[0][0]));
}
}
}
else{
$r = false;
}
}
return $r;
}
$raw = '0123456789abcdefghijklmnopqrstuvwxyzÁáÀàÂâÄäÃãĄąÆæÇçÉéÈèÊêËëĘęÍíÎîÌìÏïĮįÑñÓóÒòÔôÖöÕõŒœŞşẞßÚúÙùÛûÜüŲųŸÿ0123456789abcdefghijklmnopqrstuvwxyzÁáÀàÂâÄäÃãĄąÆæÇçÉéÈèÊêËëĘęÍíÎîÌìÏïĮįÑñÓóÒòÔôÖöÕõŒœŞşẞßÚúÙùÛûÜüŲųŸÿ';
$len = mb_strlen($raw);
$tmp = array();
for($i=0;$i<10000;$i++){
$start = $lenth = 0;
$start = mt_rand(0,$len-1);
$length = mt_rand(1,min($len-$start,10));
if($start+$length<=$len){
$tmp[] = mb_substr($raw,$start,$length);
}
}
$tmp = array_slice(array_unique($tmp),0,1000);
echo '-----compatibility test-----'.PHP_EOL;
echo 'samples count: '.count($tmp).PHP_EOL;
foreach($tmp as $str){
$chk = true;
if($chk && mb_stristr($raw,$str)!=pcre_stristr($raw,$str)){
$chk = false;
}
if($chk && mb_stristr($raw,$str,true)!=pcre_stristr($raw,$str,true)){
$chk = false;
}
if(!$chk && $str!='ß'){
echo 'raw: '.$raw.PHP_EOL;
echo 'str: '.$str.PHP_EOL.PHP_EOL;
echo 'mb_stristr($raw,$str,false)'.PHP_EOL.mb_stristr($raw,$str,false).PHP_EOL.PHP_EOL;
echo 'pcre_stristr($raw,$str,false)'.PHP_EOL.pcre_stristr($raw,$str,false).PHP_EOL.PHP_EOL;
echo 'mb_stristr($raw,$str,true)'.PHP_EOL.mb_stristr($raw,$str,true).PHP_EOL.PHP_EOL;
echo 'pcre_stristr($raw,$str,true)'.PHP_EOL.pcre_stristr($raw,$str,true).PHP_EOL.PHP_EOL;
echo 'test failed';
exit();
}
}
echo 'test finished'.PHP_EOL.PHP_EOL;
echo '-----runtime test-----'.PHP_EOL;
echo 'mb_stristr() x1000'.PHP_EOL;
$time = microtime(true);
foreach($tmp as $str){
mb_strstr($raw,$str);
}
$timea = microtime(true)-$time;
echo 'load in '.number_format($timea,5).'ms'.PHP_EOL.PHP_EOL;
echo 'pcre_stristr() x1000'.PHP_EOL;
$time = microtime(true);
foreach($tmp as $str){
pcre_stristr($raw,$str);
}
$timeb = microtime(true)-$time;
echo 'load in '.number_format($timeb,5).'ms'.PHP_EOL.PHP_EOL;
echo 'time save '.number_format(100-100*($timeb/$timea),2).'%';
?>
preferences:
41.01 ms | 402 KiB | 5 Q