选择语言 :

 Core_UTF8::str_ireplace

Returns a string or an array with all occurrences of search in subject (ignoring case) and replaced with the given replace value. This is a UTF8-aware version of str_ireplace.

This function is very slow compared to the native version. Avoid

using it when possible.

string Core_UTF8::str_ireplace( string|array $search , string|array $replace , string|array $str [, integer & $count = null ] )
author
Harry Fuecks hfuecks@gmail.com

参数列表

参数 类型 描述 默认值
$search string|array Text to replace
$replace string|array Replacement text
$str string|array Subject text
$count integer Number of matched and replaced needles will be returned via this parameter which is passed by reference null
返回值
  • string if the input was a string
  • array if the input was an array
File: ./core/classes/utf8.class.php
public static function str_ireplace($search, $replace, $str, & $count = null)
{
    if ( UTF8::is_ascii($search) && UTF8::is_ascii($replace) and UTF8::is_ascii($str) ) return str_ireplace($search, $replace, $str, $count);

    if ( is_array($str) )
    {
        foreach ( $str as $key => $val )
        {
            $str[$key] = UTF8::str_ireplace($search, $replace, $val, $count);
        }
        return $str;
    }

    if ( is_array($search) )
    {
        $keys = array_keys($search);

        foreach ( $keys as $k )
        {
            if ( is_array($replace) )
            {
                if ( array_key_exists($k, $replace) )
                {
                    $str = UTF8::str_ireplace($search[$k], $replace[$k], $str, $count);
                }
                else
                {
                    $str = UTF8::str_ireplace($search[$k], '', $str, $count);
                }
            }
            else
            {
                $str = UTF8::str_ireplace($search[$k], $replace, $str, $count);
            }
        }
        return $str;
    }

    $search = UTF8::strtolower($search);
    $str_lower = UTF8::strtolower($str);

    $total_matched_strlen = 0;
    $i = 0;

    while ( preg_match('/(.*?)' . preg_quote($search, '/') . '/s', $str_lower, $matches) )
    {
        $matched_strlen = strlen($matches[0]);
        $str_lower = substr($str_lower, $matched_strlen);

        $offset = $total_matched_strlen + strlen($matches[1]) + ($i * (strlen($replace) - 1));
        $str = substr_replace($str, $replace, $offset, strlen($search));

        $total_matched_strlen += $matched_strlen;
        $i ++;
    }

    $count += $i;
    return $str;
}