[20116] | 1 | <?php |
---|
| 2 | // +----------------------------------------------------------------------+ |
---|
| 3 | // | PHP Version 4 | |
---|
| 4 | // +----------------------------------------------------------------------+ |
---|
| 5 | // | Copyright (c) 1997-2004 The PHP Group | |
---|
| 6 | // +----------------------------------------------------------------------+ |
---|
| 7 | // | This source file is subject to version 3.0 of the PHP license, | |
---|
| 8 | // | that is bundled with this package in the file LICENSE, and is | |
---|
| 9 | // | available at through the world-wide-web at | |
---|
| 10 | // | http://www.php.net/license/3_0.txt. | |
---|
| 11 | // | If you did not receive a copy of the PHP license and are unable to | |
---|
| 12 | // | obtain it through the world-wide-web, please send a note to | |
---|
| 13 | // | license@php.net so we can mail you a copy immediately. | |
---|
| 14 | // +----------------------------------------------------------------------+ |
---|
| 15 | // | Authors: Aidan Lister <aidan@php.net> | |
---|
| 16 | // +----------------------------------------------------------------------+ |
---|
| 17 | // |
---|
[20119] | 18 | // $Id: str_ireplace.php,v 1.18 2005/01/26 04:55:13 aidan Exp $ |
---|
[20116] | 19 | |
---|
| 20 | |
---|
| 21 | /** |
---|
| 22 | * Replace str_ireplace() |
---|
| 23 | * |
---|
| 24 | * @category PHP |
---|
| 25 | * @package PHP_Compat |
---|
| 26 | * @link http://php.net/function.str_ireplace |
---|
| 27 | * @author Aidan Lister <aidan@php.net> |
---|
| 28 | * @version $Revision: 1.18 $ |
---|
| 29 | * @since PHP 5 |
---|
| 30 | * @require PHP 4.0.0 (user_error) |
---|
| 31 | * @note count not by returned by reference, to enable |
---|
| 32 | * change '$count = null' to '&$count' |
---|
| 33 | */ |
---|
| 34 | if (!function_exists('str_ireplace')) { |
---|
| 35 | function str_ireplace($search, $replace, $subject, $count = null) |
---|
| 36 | { |
---|
| 37 | // Sanity check |
---|
| 38 | if (is_string($search) && is_array($replace)) { |
---|
| 39 | user_error('Array to string conversion', E_USER_NOTICE); |
---|
| 40 | $replace = (string) $replace; |
---|
| 41 | } |
---|
| 42 | |
---|
| 43 | // If search isn't an array, make it one |
---|
| 44 | if (!is_array($search)) { |
---|
| 45 | $search = array ($search); |
---|
| 46 | } |
---|
| 47 | $search = array_values($search); |
---|
| 48 | |
---|
| 49 | // If replace isn't an array, make it one, and pad it to the length of search |
---|
| 50 | if (!is_array($replace)) { |
---|
| 51 | $replace_string = $replace; |
---|
| 52 | |
---|
| 53 | $replace = array (); |
---|
| 54 | for ($i = 0, $c = count($search); $i < $c; $i++) { |
---|
| 55 | $replace[$i] = $replace_string; |
---|
| 56 | } |
---|
| 57 | } |
---|
| 58 | $replace = array_values($replace); |
---|
| 59 | |
---|
| 60 | // Check the replace array is padded to the correct length |
---|
| 61 | $length_replace = count($replace); |
---|
| 62 | $length_search = count($search); |
---|
| 63 | if ($length_replace < $length_search) { |
---|
| 64 | for ($i = $length_replace; $i < $length_search; $i++) { |
---|
| 65 | $replace[$i] = ''; |
---|
| 66 | } |
---|
| 67 | } |
---|
| 68 | |
---|
| 69 | // If subject is not an array, make it one |
---|
| 70 | $was_array = false; |
---|
| 71 | if (!is_array($subject)) { |
---|
| 72 | $was_array = true; |
---|
| 73 | $subject = array ($subject); |
---|
| 74 | } |
---|
| 75 | |
---|
| 76 | // Loop through each subject |
---|
| 77 | $count = 0; |
---|
| 78 | foreach ($subject as $subject_key => $subject_value) { |
---|
| 79 | // Loop through each search |
---|
| 80 | foreach ($search as $search_key => $search_value) { |
---|
| 81 | // Split the array into segments, in between each part is our search |
---|
| 82 | $segments = explode(strtolower($search_value), strtolower($subject_value)); |
---|
| 83 | |
---|
| 84 | // The number of replacements done is the number of segments minus the first |
---|
| 85 | $count += count($segments) - 1; |
---|
| 86 | $pos = 0; |
---|
| 87 | |
---|
| 88 | // Loop through each segment |
---|
| 89 | foreach ($segments as $segment_key => $segment_value) { |
---|
| 90 | // Replace the lowercase segments with the upper case versions |
---|
| 91 | $segments[$segment_key] = substr($subject_value, $pos, strlen($segment_value)); |
---|
| 92 | // Increase the position relative to the initial string |
---|
| 93 | $pos += strlen($segment_value) + strlen($search_value); |
---|
| 94 | } |
---|
| 95 | |
---|
| 96 | // Put our original string back together |
---|
| 97 | $subject_value = implode($replace[$search_key], $segments); |
---|
| 98 | } |
---|
| 99 | |
---|
| 100 | $result[$subject_key] = $subject_value; |
---|
| 101 | } |
---|
| 102 | |
---|
| 103 | // Check if subject was initially a string and return it as a string |
---|
| 104 | if ($was_array === true) { |
---|
| 105 | return $result[0]; |
---|
| 106 | } |
---|
| 107 | |
---|
| 108 | // Otherwise, just return the array |
---|
| 109 | return $result; |
---|
| 110 | } |
---|
| 111 | } |
---|
| 112 | |
---|
[19792] | 113 | ?> |
---|