@@ -1071,9 +1071,10 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
1071
1071
#if PHP_VERSION_ID >= 70000
1072
1072
{
1073
1073
zend_string * key ;
1074
+ zend_ulong num_key ;
1074
1075
zval * value ;
1075
1076
1076
- ZEND_HASH_FOREACH_STR_KEY_VAL (ht_data , key , value ) {
1077
+ ZEND_HASH_FOREACH_KEY_VAL (ht_data , num_key , key , value ) {
1077
1078
if (key ) {
1078
1079
if (Z_TYPE_P (data ) == IS_OBJECT ) {
1079
1080
const char * skey ;
@@ -1088,9 +1089,14 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
1088
1089
}
1089
1090
phongo_bson_append (bson , flags & ~PHONGO_BSON_ADD_ID , skey , skey_len , Z_TYPE_P (value ), value TSRMLS_CC );
1090
1091
} else {
1091
- /* Chop off the \0 from string lengths */
1092
- phongo_bson_append (bson , flags & ~PHONGO_BSON_ADD_ID , key -> val , key -> len - 1 , Z_TYPE_P (value ), value TSRMLS_CC );
1092
+ phongo_bson_append (bson , flags & ~PHONGO_BSON_ADD_ID , key -> val , key -> len , Z_TYPE_P (value ), value TSRMLS_CC );
1093
1093
}
1094
+ } else {
1095
+ char numbuf [32 ];
1096
+ const char * skey ;
1097
+ unsigned int skey_len = 0 ;
1098
+ skey_len = bson_uint32_to_string (num_key , (const char * * )& skey , numbuf , sizeof (numbuf ));
1099
+ phongo_bson_append (bson , flags & ~PHONGO_BSON_ADD_ID , skey , skey_len , Z_TYPE_P (value ), value TSRMLS_CC );
1094
1100
}
1095
1101
} ZEND_HASH_FOREACH_END ();
1096
1102
}
0 commit comments