Skip to content

Commit abc9991

Browse files
author
Sterling Hughes
committed
@ Make the glue argument to implode() optional, if it is not specified
@ default to using "". (Sterling)
1 parent 03823d4 commit abc9991

File tree

1 file changed

+30
-15
lines changed

1 file changed

+30
-15
lines changed

ext/standard/string.c

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -857,30 +857,45 @@ PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value)
857857
}
858858
/* }}} */
859859

860-
/* {{{ proto string implode(string glue, array pieces)
860+
/* {{{ proto string implode([string glue,] array pieces)
861861
Joins array elements placing glue string between items and return one string */
862862
PHP_FUNCTION(implode)
863863
{
864-
zval **arg1, **arg2, *delim, *arr;
865-
866-
if (ZEND_NUM_ARGS() != 2 ||
867-
zend_get_parameters_ex(2, &arg1, &arg2) == FAILURE) {
864+
zval **arg1 = NULL, **arg2 = NULL, *delim, *arr;
865+
int argc = ZEND_NUM_ARGS();
866+
867+
if (argc < 1 || argc > 2 ||
868+
zend_get_parameters_ex(argc, &arg1, &arg2) == FAILURE) {
868869
WRONG_PARAM_COUNT;
869870
}
870871

871-
if (Z_TYPE_PP(arg1) == IS_ARRAY) {
872+
if (argc == 1) {
873+
MAKE_STD_ZVAL(delim);
874+
#define _IMPL_EMPTY ""
875+
ZVAL_STRINGL(delim, _IMPL_EMPTY, sizeof(_IMPL_EMPTY) - 1, 0);
876+
877+
if (Z_TYPE_PP(arg1) != IS_ARRAY) {
878+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument to implode must be an array");
879+
return;
880+
}
881+
872882
SEPARATE_ZVAL(arg1);
873883
arr = *arg1;
874-
convert_to_string_ex(arg2);
875-
delim = *arg2;
876-
} else if (Z_TYPE_PP(arg2) == IS_ARRAY) {
877-
SEPARATE_ZVAL(arg2)
878-
arr = *arg2;
879-
convert_to_string_ex(arg1);
880-
delim = *arg1;
881884
} else {
882-
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad arguments.");
883-
return;
885+
if (Z_TYPE_PP(arg1) == IS_ARRAY) {
886+
SEPARATE_ZVAL(arg1);
887+
arr = *arg1;
888+
convert_to_string_ex(arg2);
889+
delim = *arg2;
890+
} else if (Z_TYPE_PP(arg2) == IS_ARRAY) {
891+
SEPARATE_ZVAL(arg2);
892+
arr = *arg2;
893+
convert_to_string_ex(arg1);
894+
delim = *arg1;
895+
} else {
896+
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad arguments.");
897+
return;
898+
}
884899
}
885900

886901
php_implode(delim, arr, return_value);

0 commit comments

Comments
 (0)