<?php

    $needle 
'Test';
    
$haystack str_repeat('abcde'100) . 'test' .  str_repeat('abcde'100);

    
$loops 1000;
    
$times = array();
/* mall */
/*
    $start_time = microtime(TRUE);
    for($i = $loops; $i; $i--)
    {
        if(x($needle, $haystack))
        {
            echo '+';
        }
        else
        {
            echo '-';
        }
    }
    $stop_time = microtime(TRUE);
    $times['?'] = $stop_time - $start_time;
*/

    
$start_time microtime(TRUE);
    for(
$i $loops$i$i--)
    {
        if(
stripos($haystack$needle) !== FALSE)
        {
            echo 
'+';
        }
        else
        {
            echo 
'-';
        }
    }
    
$stop_time microtime(TRUE);
    
$times['stripos'] = $stop_time $start_time;
    echo 
"\n";

    
$start_time microtime(TRUE);
    for(
$i $loops$i$i--)
    {
        if(
strpos(strtolower($haystack), strtolower($needle)) !== FALSE)
        {
            echo 
'+';
        }
        else
        {
            echo 
'-';
        }
    }
    
$stop_time microtime(TRUE);
    
$times['strpos_and_strtolower'] = $stop_time $start_time;
    echo 
"\n";

    
$start_time microtime(TRUE);
    for(
$i $loops$i$i--)
    {
        if(
preg_match("#{$needle}#i"$haystack))
        {
            echo 
'+';
        }
        else
        {
            echo 
'-';
        }
    }
    
$stop_time microtime(TRUE);
    
$times['preg_match'] = $stop_time $start_time;
    echo 
"\n";

    
$start_time microtime(TRUE);
    for(
$i $loops$i$i--)
    {
        if(
preg_match("#\b{$needle}\b#i"$haystack))
        {
            echo 
'+';
        }
        else
        {
            echo 
'-';
        }
    }
    
$stop_time microtime(TRUE);
    
$times['preg_match_with_b'] = $stop_time $start_time;
    echo 
"\n";

    
$start_time microtime(TRUE);
    for(
$i $loops$i$i--)
    {
        if(
stristr($haystack$needle))
        {
            echo 
'+';
        }
        else
        {
            echo 
'-';
        }
    }
    
$stop_time microtime(TRUE);
    
$times['stristr'] = $stop_time $start_time;
    echo 
"\n";

    
$start_time microtime(TRUE);
    for(
$i $loops$i$i--)
    {
        if(
substr_count(strtolower($haystack), strtolower($needle)))
        {
            echo 
'+';
        }
        else
        {
            echo 
'-';
        }
    }
    
$stop_time microtime(TRUE);
    
$times['substr_count'] = $stop_time $start_time;
    echo 
"\n";

    
$start_time microtime(TRUE);
    for(
$i $loops$i$i--)
    {
        if(
count(explode(strtolower($needle), strtolower($haystack), 2)) > 1)
        {
            echo 
'+';
        }
        else
        {
            echo 
'-';
        }
    }
    
$stop_time microtime(TRUE);
    
$times['explode_and_count'] = $stop_time $start_time;
    echo 
"\n";

    
asort($times);
    
print_r($times);
?>