mirror of
https://github.com/php/php-src.git
synced 2026-04-15 20:11:02 +02:00
Unify str_replace and str_ireplace using INTERNAL_FUNCTION_PARAM_PASSTHRU -- reduce codebase/maintenance complexity
This commit is contained in:
@@ -2887,9 +2887,9 @@ static void php_str_replace_in_subject(zval *search, zval *replace, zval **subje
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto mixed str_replace(mixed search, mixed replace, mixed subject)
|
||||
Replaces all occurrences of search in haystack with replace */
|
||||
PHP_FUNCTION(str_replace)
|
||||
/* {{{ php_str_replace_common
|
||||
*/
|
||||
static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensitivity)
|
||||
{
|
||||
zval **subject, **search, **replace, **subject_entry;
|
||||
zval *result;
|
||||
@@ -2923,7 +2923,7 @@ PHP_FUNCTION(str_replace)
|
||||
and add the result to the return_value array. */
|
||||
while (zend_hash_get_current_data(Z_ARRVAL_PP(subject), (void **)&subject_entry) == SUCCESS) {
|
||||
MAKE_STD_ZVAL(result);
|
||||
php_str_replace_in_subject(*search, *replace, subject_entry, result, 1);
|
||||
php_str_replace_in_subject(*search, *replace, subject_entry, result, case_sensitivity);
|
||||
/* Add to return array */
|
||||
switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(subject), &string_key,
|
||||
&string_key_len, &num_key, 0, NULL)) {
|
||||
@@ -2939,65 +2939,24 @@ PHP_FUNCTION(str_replace)
|
||||
zend_hash_move_forward(Z_ARRVAL_PP(subject));
|
||||
}
|
||||
} else { /* if subject is not an array */
|
||||
php_str_replace_in_subject(*search, *replace, subject, return_value, 1);
|
||||
php_str_replace_in_subject(*search, *replace, subject, return_value, case_sensitivity);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto mixed str_replace(mixed search, mixed replace, mixed subject)
|
||||
Replaces all occurrences of search in haystack with replace */
|
||||
PHP_FUNCTION(str_replace)
|
||||
{
|
||||
php_str_replace_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto mixed str_ireplace(mixed search, mixed replace, mixed subject)
|
||||
Replaces all occurrences of search in haystack with replace / case-insensitive */
|
||||
PHP_FUNCTION(str_ireplace)
|
||||
{
|
||||
zval **subject, **search, **replace, **subject_entry;
|
||||
zval *result;
|
||||
char *string_key;
|
||||
uint string_key_len;
|
||||
ulong num_key;
|
||||
|
||||
if (ZEND_NUM_ARGS() != 3 ||
|
||||
zend_get_parameters_ex(3, &search, &replace, &subject) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
SEPARATE_ZVAL(search);
|
||||
SEPARATE_ZVAL(replace);
|
||||
SEPARATE_ZVAL(subject);
|
||||
|
||||
/* Make sure we're dealing with strings and do the replacement. */
|
||||
if (Z_TYPE_PP(search) != IS_ARRAY) {
|
||||
convert_to_string_ex(search);
|
||||
convert_to_string_ex(replace);
|
||||
} else if (Z_TYPE_PP(replace) != IS_ARRAY) {
|
||||
convert_to_string_ex(replace);
|
||||
}
|
||||
|
||||
/* if subject is an array */
|
||||
if (Z_TYPE_PP(subject) == IS_ARRAY) {
|
||||
array_init(return_value);
|
||||
zend_hash_internal_pointer_reset(Z_ARRVAL_PP(subject));
|
||||
|
||||
/* For each subject entry, convert it to string, then perform replacement
|
||||
and add the result to the return_value array. */
|
||||
while (zend_hash_get_current_data(Z_ARRVAL_PP(subject), (void **)&subject_entry) == SUCCESS) {
|
||||
MAKE_STD_ZVAL(result);
|
||||
php_str_replace_in_subject(*search, *replace, subject_entry, result, 0);
|
||||
/* Add to return array */
|
||||
switch (zend_hash_get_current_key_ex(Z_ARRVAL_PP(subject), &string_key,
|
||||
&string_key_len, &num_key, 0, NULL)) {
|
||||
case HASH_KEY_IS_STRING:
|
||||
add_assoc_zval_ex(return_value, string_key, string_key_len, result);
|
||||
break;
|
||||
|
||||
case HASH_KEY_IS_LONG:
|
||||
add_index_zval(return_value, num_key, result);
|
||||
break;
|
||||
}
|
||||
|
||||
zend_hash_move_forward(Z_ARRVAL_PP(subject));
|
||||
}
|
||||
} else { /* if subject is not an array */
|
||||
php_str_replace_in_subject(*search, *replace, subject, return_value, 0);
|
||||
}
|
||||
php_str_replace_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user