@@ -4188,17 +4188,39 @@ PHP_FUNCTION(array_column)
4188
4188
zkeyval = array_column_fetch_prop (data , zkey , & rvk );
4189
4189
}
4190
4190
if (zkeyval ) {
4191
- if (Z_TYPE_P (zkeyval ) == IS_STRING ) {
4192
- zend_symtable_update (Z_ARRVAL_P (return_value ), Z_STR_P (zkeyval ), zcolval );
4193
- } else if (Z_TYPE_P (zkeyval ) == IS_LONG ) {
4194
- add_index_zval (return_value , Z_LVAL_P (zkeyval ), zcolval );
4195
- } else if (Z_TYPE_P (zkeyval ) == IS_OBJECT ) {
4196
- zend_string * tmp_key ;
4197
- zend_string * key = zval_get_tmp_string (zkeyval , & tmp_key );
4198
- zend_symtable_update (Z_ARRVAL_P (return_value ), key , zcolval );
4199
- zend_tmp_string_release (tmp_key );
4200
- } else {
4201
- add_next_index_zval (return_value , zcolval );
4191
+ switch (Z_TYPE_P (zkeyval )) {
4192
+ case IS_STRING :
4193
+ zend_symtable_update (Z_ARRVAL_P (return_value ), Z_STR_P (zkeyval ), zcolval );
4194
+ break ;
4195
+ case IS_LONG :
4196
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), Z_LVAL_P (zkeyval ), zcolval );
4197
+ break ;
4198
+ case IS_OBJECT :
4199
+ {
4200
+ zend_string * tmp_key ;
4201
+ zend_string * key = zval_get_tmp_string (zkeyval , & tmp_key );
4202
+ zend_symtable_update (Z_ARRVAL_P (return_value ), key , zcolval );
4203
+ zend_tmp_string_release (tmp_key );
4204
+ break ;
4205
+ }
4206
+ case IS_NULL :
4207
+ zend_hash_update (Z_ARRVAL_P (return_value ), ZSTR_EMPTY_ALLOC (), zcolval );
4208
+ break ;
4209
+ case IS_DOUBLE :
4210
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), zend_dval_to_lval (Z_DVAL_P (zkeyval )), zcolval );
4211
+ break ;
4212
+ case IS_TRUE :
4213
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), 1 , zcolval );
4214
+ break ;
4215
+ case IS_FALSE :
4216
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), 0 , zcolval );
4217
+ break ;
4218
+ case IS_RESOURCE :
4219
+ zend_hash_index_update (Z_ARRVAL_P (return_value ), Z_RES_HANDLE_P (zkeyval ), zcolval );
4220
+ break ;
4221
+ default :
4222
+ add_next_index_zval (return_value , zcolval );
4223
+ break ;
4202
4224
}
4203
4225
if (zkeyval == & rvk ) {
4204
4226
zval_ptr_dtor (& rvk );
0 commit comments