diff --git a/src/php/ext/grpc/call.c b/src/php/ext/grpc/call.c
index 4b4336666cba088d40ccb916c667f9ab818bfe01..024ab70571b62395924bf75621fcfd43b8e394be 100644
--- a/src/php/ext/grpc/call.c
+++ b/src/php/ext/grpc/call.c
@@ -125,9 +125,15 @@ zval *grpc_parse_metadata_array(grpc_metadata_array *metadata_array) {
     memcpy(str_val, elem->value, elem->value_length);
     if (zend_hash_find(array_hash, str_key, key_len, (void **)data) ==
         SUCCESS) {
-      zend_throw_exception(zend_exception_get_default(),
-                           "Metadata hash somehow contains wrong types.",
-                           1 TSRMLS_CC);
+      if (Z_TYPE_P(*data) != IS_ARRAY) {
+        zend_throw_exception(zend_exception_get_default(),
+                             "Metadata hash somehow contains wrong types.",
+                             1 TSRMLS_CC);
+        efree(str_key);
+        efree(str_val);
+        return NULL;
+      }
+      add_next_index_stringl(*data, str_val, elem->value_length, false);
     } else {
       MAKE_STD_ZVAL(inner_array);
       array_init(inner_array);