summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2003-05-02 10:02:40 +0000
committerAndrey Hristov <andrey@php.net>2003-05-02 10:02:40 +0000
commita894bf5c878410cdb3e403202bbf166f5b0d6d6f (patch)
tree191c5b8f6d01600b046581a2036f3ae16f4ddbb0 /ext
parent83a0e508df4d2432281a125e3b5a355c10302d99 (diff)
downloadphp-git-a894bf5c878410cdb3e403202bbf166f5b0d6d6f.tar.gz
Extending substr_replace().
Every parameter can be mixed (string/array) also the return type. #see the test file if you need more info.
Diffstat (limited to 'ext')
-rw-r--r--ext/standard/string.c244
-rw-r--r--ext/standard/tests/strings/substr_replace.phpt812
2 files changed, 1019 insertions, 37 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 89e4fff459..778ccd3b89 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -1833,13 +1833,14 @@ PHP_FUNCTION(substr)
}
/* }}} */
-/* {{{ proto string substr_replace(string str, string repl, int start [, int length])
+
+/* {{{ proto mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])
Replaces part of a string with another string */
PHP_FUNCTION(substr_replace)
{
zval **str;
zval **from;
- zval **len;
+ zval **len = NULL;
zval **repl;
char *result;
int result_len;
@@ -1847,61 +1848,230 @@ PHP_FUNCTION(substr_replace)
int f;
int argc = ZEND_NUM_ARGS();
+ HashPosition pos_str, pos_from, pos_repl, pos_len;
+ zval **tmp_str = NULL, **tmp_from = NULL, **tmp_repl = NULL, **tmp_len= NULL;
+
+
if (argc < 3 || argc > 4 || zend_get_parameters_ex(argc, &str, &repl, &from, &len) == FAILURE) {
WRONG_PARAM_COUNT;
}
-
- convert_to_string_ex(str);
- convert_to_string_ex(repl);
- convert_to_long_ex(from);
+ if (Z_TYPE_PP(str) != IS_ARRAY) {
+ convert_to_string_ex(str);
+ }
+ if (Z_TYPE_PP(repl) != IS_ARRAY) {
+ convert_to_string_ex(repl);
+ }
+ if (Z_TYPE_PP(from) != IS_ARRAY) {
+ convert_to_long_ex(from);
+ }
+
if (argc > 3) {
- convert_to_long_ex(len);
- l = Z_LVAL_PP(len);
+ if (Z_TYPE_PP(len) != IS_ARRAY) {
+ convert_to_long_ex(len);
+ l = Z_LVAL_PP(len);
+ }
} else {
- l = Z_STRLEN_PP(str);
+ if (Z_TYPE_PP(str) != IS_ARRAY) {
+ l = Z_STRLEN_PP(str);
+ }
}
-
- f = Z_LVAL_PP(from);
- /* if "from" position is negative, count start position from the end
- * of the string
- */
- if (f < 0) {
- f = Z_STRLEN_PP(str) + f;
- if (f < 0) {
- f = 0;
+ if (Z_TYPE_PP(str) == IS_STRING) {
+ if (
+ (argc == 3 && Z_TYPE_PP(from) == IS_ARRAY)
+ ||
+ (argc == 4 && Z_TYPE_PP(from) != Z_TYPE_PP(len))
+ ) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "'from' and 'len' should be of same type - numerical or array ");
+ RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
+ }
+ if (argc == 4 && Z_TYPE_PP(from) == IS_ARRAY) {
+ if (zend_hash_num_elements(Z_ARRVAL_PP(from)) != zend_hash_num_elements(Z_ARRVAL_PP(len))) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "'from' and 'len' should have the same number of elements");
+ RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
+ }
}
- } else if (f > Z_STRLEN_PP(str)) {
- f = Z_STRLEN_PP(str);
}
+
+ if (Z_TYPE_PP(str) != IS_ARRAY) {
+ if (Z_TYPE_PP(from) != IS_ARRAY) {
+ int repl_len = 0;
- /* if "length" position is negative, set it to the length
- * needed to stop that many chars from the end of the string
- */
- if (l < 0) {
- l = (Z_STRLEN_PP(str) - f) + l;
- if (l < 0) {
- l = 0;
+ f = Z_LVAL_PP(from);
+
+ /* if "from" position is negative, count start position from the end
+ * of the string
+ */
+ if (f < 0) {
+ f = Z_STRLEN_PP(str) + f;
+ if (f < 0) {
+ f = 0;
+ }
+ } else if (f > Z_STRLEN_PP(str)) {
+ f = Z_STRLEN_PP(str);
+ }
+ /* if "length" position is negative, set it to the length
+ * needed to stop that many chars from the end of the string
+ */
+ if (l < 0) {
+ l = (Z_STRLEN_PP(str) - f) + l;
+ if (l < 0) {
+ l = 0;
+ }
+ }
+
+ if ((f + l) > Z_STRLEN_PP(str)) {
+ l = Z_STRLEN_PP(str) - f;
+ }
+ if (Z_TYPE_PP(repl) == IS_ARRAY) {
+ zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(repl), &pos_repl);
+ if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(repl), (void **) &tmp_repl, &pos_repl)) {
+ convert_to_string_ex(tmp_repl);
+ repl_len = Z_STRLEN_PP(tmp_repl);
+ }
+ result_len = Z_STRLEN_PP(str) - l + repl_len;
+ result = ecalloc(result_len + 1, sizeof(char *));
+
+ memcpy(result, Z_STRVAL_PP(str), f);
+ if (repl_len) {
+ memcpy(&result[f], Z_STRVAL_PP(tmp_repl), repl_len);
+ }
+ } else {
+ repl_len = Z_STRLEN_PP(repl);
+ result_len = Z_STRLEN_PP(str) - l + repl_len;
+ result = ecalloc(result_len + 1, sizeof(char *));
+
+ memcpy(result, Z_STRVAL_PP(str), f);
+ memcpy(&result[f], Z_STRVAL_PP(repl), repl_len);
+ }
+ memcpy(&result[f + repl_len], Z_STRVAL_PP(str) + f + l, Z_STRLEN_PP(str) - f - l);
+ RETURN_STRINGL(result, result_len, 0);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Functionality of 'from' and 'len' as arrays is not implemented.");
+ RETURN_STRINGL(Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
}
- }
+ } else { /* str is array of strings */
+
+ array_init(return_value);
- if ((f + l) > Z_STRLEN_PP(str)) {
- l = Z_STRLEN_PP(str) - f;
- }
+ if (Z_TYPE_PP(from) == IS_ARRAY) {
+ zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(from), &pos_from);
+ }
+
+ if (argc > 3 && Z_TYPE_PP(len) == IS_ARRAY) {
+ zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(len), &pos_len);
+ }
+
+ if (Z_TYPE_PP(repl) == IS_ARRAY) {
+ zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(repl), &pos_repl);
+ }
+
+
+ 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) {
+ convert_to_string_ex(tmp_str);
+
+ if (Z_TYPE_PP(from) == IS_ARRAY) {
+ if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(from), (void **) &tmp_from, &pos_from)) {
+ convert_to_long_ex(tmp_from);
+
+ f = Z_LVAL_PP(tmp_from);
+ if (f < 0) {
+ f = Z_STRLEN_PP(tmp_str) + f;
+ if (f < 0) {
+ f = 0;
+ }
+ } else if (f > Z_STRLEN_PP(tmp_str)) {
+ f = Z_STRLEN_PP(tmp_str);
+ }
+ zend_hash_move_forward_ex(Z_ARRVAL_PP(from), &pos_from);
+ } else {
+ f = 0;
+ }
+ } else {
+ f = Z_LVAL_PP(from);
+ if (f < 0) {
+ f = Z_STRLEN_PP(tmp_str) + f;
+ if (f < 0) {
+ f = 0;
+ }
+ } else if (f > Z_STRLEN_PP(tmp_str)) {
+ f = Z_STRLEN_PP(tmp_str);
+ }
+ }
+
+
+ if (argc > 3 && Z_TYPE_PP(len) == IS_ARRAY) {
+ if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(len), (void **) &tmp_len, &pos_len)) {
+ convert_to_long_ex(tmp_len);
+
+ l = Z_LVAL_PP(tmp_len);
+ zend_hash_move_forward_ex(Z_ARRVAL_PP(len), &pos_len);
+ } else {
+ l = Z_STRLEN_PP(tmp_str);
+ }
+ } else if (argc > 3) {
+ l = Z_LVAL_PP(len);
+ } else {
+ l = Z_STRLEN_PP(tmp_str);
+ }
+
+ if (l < 0) {
+ l = (Z_STRLEN_PP(tmp_str) - f) + l;
+ if (l < 0) {
+ l = 0;
+ }
+ }
+
+
+ if ((f + l) > Z_STRLEN_PP(tmp_str)) {
+ l = Z_STRLEN_PP(tmp_str) - f;
+ }
+
+ result_len = Z_STRLEN_PP(tmp_str) - l;
+
+ if (Z_TYPE_PP(repl) == IS_ARRAY) {
+ if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_PP(repl), (void **) &tmp_repl, &pos_repl)) {
+ convert_to_string_ex(tmp_repl);
+ result_len += Z_STRLEN_PP(tmp_repl);
+ zend_hash_move_forward_ex(Z_ARRVAL_PP(repl), &pos_repl);
+ result = ecalloc(result_len + 1, sizeof(char *));
+
+ memcpy(result, Z_STRVAL_PP(tmp_str), f);
+ memcpy(&result[f], Z_STRVAL_PP(tmp_repl), Z_STRLEN_PP(tmp_repl));
+ memcpy(&result[f + Z_STRLEN_PP(tmp_repl)], Z_STRVAL_PP(tmp_str) + f + l, Z_STRLEN_PP(tmp_str) - f - l);
+ } else {
+ result = ecalloc(result_len + 1, sizeof(char *));
+
+ memcpy(result, Z_STRVAL_PP(tmp_str), f);
+ memcpy(&result[f], Z_STRVAL_PP(tmp_str) + f + l, Z_STRLEN_PP(tmp_str) - f - l);
+ }
+
+ } else {
+ result_len += Z_STRLEN_PP(repl);
- result_len = Z_STRLEN_PP(str) - l + Z_STRLEN_PP(repl);
- result = ecalloc(result_len + 1, sizeof(char *));
+ result = ecalloc(result_len + 1, sizeof(char *));
- memcpy(result, Z_STRVAL_PP(str), f);
- memcpy(&result[f], Z_STRVAL_PP(repl), Z_STRLEN_PP(repl));
- memcpy(&result[f + Z_STRLEN_PP(repl)], Z_STRVAL_PP(str) + f + l, Z_STRLEN_PP(str) - f - l);
- RETURN_STRINGL(result, result_len, 0);
+ memcpy(result, Z_STRVAL_PP(tmp_str), f);
+ memcpy(&result[f], Z_STRVAL_PP(repl), Z_STRLEN_PP(repl));
+ memcpy(&result[f + Z_STRLEN_PP(repl)], Z_STRVAL_PP(tmp_str) + f + l, Z_STRLEN_PP(tmp_str) - f - l);
+ }
+
+
+ add_next_index_stringl(return_value, result, result_len, 0);
+
+ zend_hash_move_forward_ex(Z_ARRVAL_PP(str), &pos_str);
+ } /*while*/
+ } /* if */
}
/* }}} */
+
+
+
/* {{{ proto string quotemeta(string str)
Quotes meta characters */
PHP_FUNCTION(quotemeta)
diff --git a/ext/standard/tests/strings/substr_replace.phpt b/ext/standard/tests/strings/substr_replace.phpt
new file mode 100644
index 0000000000..ada02eb83f
--- /dev/null
+++ b/ext/standard/tests/strings/substr_replace.phpt
@@ -0,0 +1,812 @@
+--TEST--
+substr_replace() function
+--POST--
+--GET--
+--FILE--
+<?php
+$str = "try this";
+$repl = "bala ";
+$start = 2;
+echo "\n";
+
+
+echo "substr_replace('$str', '$repl', $start)\n";
+var_dump(substr_replace($str, $repl, $start));
+echo "\n";
+
+$len = 3;
+echo "substr_replace('$str', '$repl', $start, $len)\n";
+var_dump(substr_replace($str, $repl, $start, $len));
+echo "\n";
+
+$len = 0;
+echo "substr_replace('$str', '$repl', $start, $len)\n";
+var_dump(substr_replace($str, $repl, $start, $len));
+echo "\n";
+
+$len = -2;
+echo "substr_replace('$str', '$repl', $start, $len)\n";
+var_dump(substr_replace($str, $repl, $start, $len));
+echo "\n";
+echo "\n";
+echo "\n";
+
+
+$str = "try this";
+$repl = array("bala ");
+$start = 4;
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1)."")."\n";
+var_dump(substr_replace($str, $repl, $start))."\n";
+echo "\n";
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1)."")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+echo "\n";
+echo "\n";
+echo "\n";
+
+
+
+$str = array("ala portokala");
+$repl = array("bala ");
+$start = array(4);
+$len = array(3);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1)."")."\n";
+var_dump(substr_replace($str, $repl, $start))."\n";
+echo "\n";
+
+$len = array(3);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+$len = array(0);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+$len = array(-2);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).", ".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+echo "\n";
+
+
+
+
+$str = array("ala portokala");
+$repl = "bala ";
+$start = 4;
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start))."\n";
+echo "\n";
+echo "\n";
+
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = 4;
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = 4;
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = 4;
+$len = 0;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = 4;
+$len = 0;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = 4;
+$len = -2;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = 4;
+$len = -2;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+
+
+
+
+$str = array("ala portokala");
+$repl = "bala ";
+$start = array(4);
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start))."\n";
+echo "\n";
+echo "\n";
+
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4);
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4);
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4);
+$len = 0;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4);
+$len = 0;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4);
+$len = -2;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4);
+$len = -2;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala");
+$repl = "bala ";
+$start = array(4,2);
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start))."\n";
+echo "\n";
+echo "\n";
+
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = 3;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = 0;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = 0;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = -2;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = -2;
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(3);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start))."\n";
+echo "\n";
+echo "\n";
+
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = array(3);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(3);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = array(0);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(0);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = array(-2);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(-2);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(3,2);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start))."\n";
+echo "\n";
+echo "\n";
+
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = array(3,2);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(3,2);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = array(0,0);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(0,0);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+$str = array("ala portokala", "try this");
+$repl = array("bala ");
+$start = array(4,2);
+$len = array(-2,-3);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+echo "\n";
+
+
+$str = array("ala portokala", "try this");
+$repl = "bala ";
+$start = array(4,2);
+$len = array(-2,-3);
+echo str_replace("\n","","substr_replace(".var_export($str,1).", ".var_export($repl,1).",".var_export($start,1).", ".var_export($len,1).")")."\n";
+var_dump(substr_replace($str, $repl, $start, $len))."\n";
+echo "\n";
+
+
+
+
+?>
+--EXPECT--
+substr_replace('try this', 'bala ', 2)
+string(7) "trbala "
+
+substr_replace('try this', 'bala ', 2, 3)
+string(10) "trbala his"
+
+substr_replace('try this', 'bala ', 2, 0)
+string(13) "trbala y this"
+
+substr_replace('try this', 'bala ', 2, -2)
+string(9) "trbala is"
+
+
+
+substr_replace('try this', array ( 0 => 'bala ',), 4
+string(9) "try bala "
+
+substr_replace('try this', array ( 0 => 'bala ',), 4
+string(10) "try bala s"
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,)
+array(1) {
+ [0]=>
+ string(9) "ala bala "
+}
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => 3,))
+array(1) {
+ [0]=>
+ string(15) "ala bala tokala"
+}
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => 0,))
+array(1) {
+ [0]=>
+ string(18) "ala bala portokala"
+}
+
+substr_replace(array ( 0 => 'ala portokala',), array ( 0 => 'bala ',), array ( 0 => 4,), array ( 0 => -2,))
+array(1) {
+ [0]=>
+ string(11) "ala bala la"
+}
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',4)
+array(1) {
+ [0]=>
+ string(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, 3)
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(5) "try s"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, 3)
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(10) "try bala s"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, 0)
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, 0)
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(13) "try bala this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),4, -2)
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(6) "try is"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',4, -2)
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(11) "try bala is"
+}
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4,))
+array(1) {
+ [0]=>
+ string(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), 3)
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(5) " this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), 3)
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(10) "bala this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), 0)
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), 0)
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(13) "bala try this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4,), -2)
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(2) "is"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4,), -2)
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(7) "bala is"
+}
+
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
+array(1) {
+ [0]=>
+ string(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), 3)
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(5) "trhis"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), 3)
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(10) "trbala his"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), 0)
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), 0)
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(13) "trbala y this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), -2)
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(4) "tris"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), -2)
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(9) "trbala is"
+}
+
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
+array(1) {
+ [0]=>
+ string(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 3,))
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(2) "tr"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 3,))
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(7) "trbala "
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 0,))
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(2) "tr"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 0,))
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(7) "trbala "
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => -2,))
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(2) "tr"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => -2,))
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(7) "trbala "
+}
+
+
+
+
+
+
+
+substr_replace(array ( 0 => 'ala portokala',), 'bala ',array ( 0 => 4, 1 => 2,))
+array(1) {
+ [0]=>
+ string(9) "ala bala "
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 3, 1 => 2,))
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(6) "trthis"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 3, 1 => 2,))
+array(2) {
+ [0]=>
+ string(15) "ala bala tokala"
+ [1]=>
+ string(11) "trbala this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => 0, 1 => 0,))
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(8) "try this"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => 0, 1 => 0,))
+array(2) {
+ [0]=>
+ string(18) "ala bala portokala"
+ [1]=>
+ string(13) "trbala y this"
+}
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), array ( 0 => 'bala ',),array ( 0 => 4, 1 => 2,), array ( 0 => -2, 1 => -3,))
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(5) "trhis"
+}
+
+
+substr_replace(array ( 0 => 'ala portokala', 1 => 'try this',), 'bala ',array ( 0 => 4, 1 => 2,), array ( 0 => -2, 1 => -3,))
+array(2) {
+ [0]=>
+ string(11) "ala bala la"
+ [1]=>
+ string(10) "trbala his"
+}
+