diff options
author | Xinchen Hui <laruence@gmail.com> | 2018-07-24 11:35:22 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2018-07-24 11:35:22 +0800 |
commit | 2a181b5ea01960fd3cd5c1cbc835c6423ec0186e (patch) | |
tree | f3f984b7857f6be61147f140f881619753568598 /ext/standard/array.c | |
parent | c20a97df6d48c60f6221a502fae934306666d41c (diff) | |
parent | 38d97557da2614f5fe1d0fa64f33dfb2cf6cbaad (diff) | |
download | php-git-2a181b5ea01960fd3cd5c1cbc835c6423ec0186e.tar.gz |
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1:
Fixed bug #68553 (array_column: null values in $index_key become incrementing keys in result)
Diffstat (limited to 'ext/standard/array.c')
-rw-r--r-- | ext/standard/array.c | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index b2d9b36c35..4be808879f 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -4228,16 +4228,38 @@ 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 *key = zval_get_string(zkeyval); - zend_symtable_update(Z_ARRVAL_P(return_value), key, zcolval); - zend_string_release(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 *key = zval_get_string(zkeyval); + zend_symtable_update(Z_ARRVAL_P(return_value), key, zcolval); + zend_string_release(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); |