![]() |
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patch php-trunk-substr_replace-array-keys for Strings related Bug #55366Patch version 2011-08-05 09:45 UTC Return to Bug #55366 | Download this patchThis patch is obsolete Obsoleted by patches: Patch Revisions:Developer: arpad@php.netIndex: ext/standard/string.c =================================================================== --- ext/standard/string.c (revision 314290) +++ ext/standard/string.c (working copy) @@ -2398,6 +2398,10 @@ RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1); } } else { /* str is array of strings */ + char *str_index = NULL; + uint str_index_len; + ulong num_index; + array_init(return_value); if (Z_TYPE_PP(from) == IS_ARRAY) { @@ -2414,6 +2418,8 @@ zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(str), &pos_str); while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(str), (void **) &tmp_str, &pos_str) == SUCCESS) { + zend_hash_get_current_key_ex(Z_ARRVAL_PP(str), &str_index, &str_index_len, &num_index, 0, &pos_str); + zval *orig_str; zval dummy; if(Z_TYPE_PP(tmp_str) != IS_STRING) { @@ -2533,7 +2539,13 @@ } result[result_len] = '\0'; - add_next_index_stringl(return_value, result, result_len, 0); + + if (zend_hash_get_current_key_type_ex(Z_ARRVAL_PP(str), &pos_str) == HASH_KEY_IS_STRING) { + add_assoc_stringl_ex(return_value, str_index, str_index_len, result, result_len, 0); + } else { + add_index_stringl(return_value, num_index, result, result_len, 0); + } + if(Z_TYPE_PP(tmp_str) != IS_STRING) { zval_dtor(orig_str); } Index: ext/standard/tests/strings/substr_replace_array.phpt =================================================================== --- ext/standard/tests/strings/substr_replace_array.phpt (revision 0) +++ ext/standard/tests/strings/substr_replace_array.phpt (revision 0) @@ -0,0 +1,19 @@ +--TEST-- +substr_replace() function - array +--FILE-- +<?php + +$arr = array('abc' => 'llsskdkk','def' => 'llsskjkkdd', 4 => 'hello', 42 => 'world'); +$newarr = substr_replace($arr, 'zzz', 0, -2); + +print_r($newarr); + +?> +--EXPECTF-- +Array +( + [abc] => zzzkk + [def] => zzzdd + [4] => zzzlo + [42] => zzzld +) |
![]() All rights reserved. |
Last updated: Mon Apr 07 22:01:29 2025 UTC |