note 109580 deleted from ref.mbstring by danbrown
| From: | danbrown@php.net | Date: | Mon, 30 Jul 2012 16:12:20 +0000 |
| Subject: | note 109580 deleted from ref.mbstring by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-189515@lists.php.net to get a copy of this message | ||
Note Submitter: sean at iamseanmurphy dot com
----
There are many mb_str_replace() implementations floating around the net, but I wanted one that is
not only efficient, but also works in exactly the same manner as str_replace(). This is what I came
up with:
<?php
/**
* Replace all occurrences of the search string with the replacement string.
*
* @author Sean Murphy <sean@iamseanmurphy.com>
* @copyright Copyright 2012 Sean Murphy. All rights reserved.
* @license http://creativecommons.org/publicdomain/zero/1.0/
* @link http://php.net/manual/function.str-replace.php
* @link http://iamseanmurphy.com/mb-str-replace-the-missing-php-function/
*
* @param mixed $search
* @param mixed $replace
* @param mixed $subject
* @param int $count
* @return mixed
*/
if (!function_exists('mb_str_replace')) {
function mb_str_replace($search, $replace, $subject, &$count = 0) {
if (!is_array($subject)) {
// Normalize $search and $replace so they are both arrays of the same length
$searches = is_array($search) ? array_values($search) : array($search);
$replacements = is_array($replace) ? array_values($replace) : array($replace);
$replacements = array_pad($replacements, count($searches), '');
// Make replacements
foreach ($searches as $key => $search) {
$parts = mb_split(preg_quote($search), $subject);
$count += count($parts) - 1;
$subject = implode($replacements[$key], $parts);
}
} else {
// Call mb_str_replace for each subject in array, recursively
foreach ($subject as $key => $value) {
$subject[$key] = mb_str_replace($search, $replace, $value, $count);
}
}
return $subject;
}
}
?>