summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index d9c0216f8d..e7bc0a8e43 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -4246,6 +4246,17 @@ PHP_FUNCTION(array_combine)
} else if (Z_TYPE_PP(entry_keys) == IS_LONG) {
zval_add_ref(entry_values);
add_index_zval(return_value, Z_LVAL_PP(entry_keys), *entry_values);
+ } else {
+ zval key;
+
+ key = **entry_keys;
+ zval_copy_ctor(&key);
+ convert_to_string(&key);
+
+ zval_add_ref(entry_values);
+ add_assoc_zval(return_value, Z_STRVAL(key), *entry_values);
+
+ zval_dtor(&key);
}
zend_hash_move_forward_ex(Z_ARRVAL_P(keys), &pos_keys);
zend_hash_move_forward_ex(Z_ARRVAL_P(values), &pos_values);