summaryrefslogtreecommitdiff
path: root/ext/standard/array.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2018-07-24 11:37:09 +0800
committerXinchen Hui <laruence@gmail.com>2018-07-24 11:37:09 +0800
commit3ca9aaf24e4f61ce77439ce1ddf74f8b26db629b (patch)
treeb46c956c799511e78cab0f5ef995f718dc4bf5fd /ext/standard/array.c
parent4799cde613a131c312793d194414e3b3b015877a (diff)
parent033dac7a6f6ac323fb35eb2c26cd716c610e18cf (diff)
downloadphp-git-3ca9aaf24e4f61ce77439ce1ddf74f8b26db629b.tar.gz
Merge branch 'PHP-7.2'
* PHP-7.2: Update NEWs Fixed bug #68553 (array_column: null values in $index_key become incrementing keys in result) Conflicts: ext/standard/array.c
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r--ext/standard/array.c44
1 files changed, 33 insertions, 11 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 25e8520cc8..400e305f3c 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -4188,17 +4188,39 @@ PHP_FUNCTION(array_column)
zkeyval = array_column_fetch_prop(data, zkey, &rvk);
}
if (zkeyval) {
- if (Z_TYPE_P(zkeyval) == IS_STRING) {
- zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(zkeyval), zcolval);
- } else if (Z_TYPE_P(zkeyval) == IS_LONG) {
- add_index_zval(return_value, Z_LVAL_P(zkeyval), zcolval);
- } else if (Z_TYPE_P(zkeyval) == IS_OBJECT) {
- zend_string *tmp_key;
- zend_string *key = zval_get_tmp_string(zkeyval, &tmp_key);
- zend_symtable_update(Z_ARRVAL_P(return_value), key, zcolval);
- zend_tmp_string_release(tmp_key);
- } else {
- add_next_index_zval(return_value, zcolval);
+ switch (Z_TYPE_P(zkeyval)) {
+ case IS_STRING:
+ zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(zkeyval), zcolval);
+ break;
+ case IS_LONG:
+ zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(zkeyval), zcolval);
+ break;
+ case IS_OBJECT:
+ {
+ zend_string *tmp_key;
+ zend_string *key = zval_get_tmp_string(zkeyval, &tmp_key);
+ zend_symtable_update(Z_ARRVAL_P(return_value), key, zcolval);
+ zend_tmp_string_release(tmp_key);
+ break;
+ }
+ case IS_NULL:
+ zend_hash_update(Z_ARRVAL_P(return_value), ZSTR_EMPTY_ALLOC(), zcolval);
+ break;
+ case IS_DOUBLE:
+ zend_hash_index_update(Z_ARRVAL_P(return_value), zend_dval_to_lval(Z_DVAL_P(zkeyval)), zcolval);
+ break;
+ case IS_TRUE:
+ zend_hash_index_update(Z_ARRVAL_P(return_value), 1, zcolval);
+ break;
+ case IS_FALSE:
+ zend_hash_index_update(Z_ARRVAL_P(return_value), 0, zcolval);
+ break;
+ case IS_RESOURCE:
+ zend_hash_index_update(Z_ARRVAL_P(return_value), Z_RES_HANDLE_P(zkeyval), zcolval);
+ break;
+ default:
+ add_next_index_zval(return_value, zcolval);
+ break;
}
if (zkeyval == &rvk) {
zval_ptr_dtor(&rvk);