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.
using it when possible.
string Core_UTF8::str_ireplace( string|array $search , string|array $replace , string|array $str [, integer & $count = null ] )
参数列表
参数 类型 描述 默认值 $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 stringarray
if the input was an arraypublic 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;
}