helly Sat Jul 15 10:10:47 2006 UTC Added files: /php-src/ext/standard/tests/array array_fill_keys.phpt
Modified files: /php-src/ext/standard array.c basic_functions.c php_array.h Log: - Add array_fill_keys() (Matt W, php_lists at realplain com) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.362&r2=1.363&diff_format=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.362 php-src/ext/standard/array.c:1.363 --- php-src/ext/standard/array.c:1.362 Fri Jul 14 22:41:22 2006 +++ php-src/ext/standard/array.c Sat Jul 15 10:10:46 2006 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.362 2006/07/14 22:41:22 andrei Exp $ */ +/* $Id: array.c,v 1.363 2006/07/15 10:10:46 helly Exp $ */ #include "php.h" #include "php_ini.h" @@ -1646,6 +1646,58 @@ /* }}} */ +/* {{{ proto array array_fill_keys(array keys, mixed val) + Create an array using the elements of the first parameter as keys each initialized to val */ +PHP_FUNCTION(array_fill_keys) +{ + zval **keys, **val, **entry; + HashPosition pos; + + if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &keys, &val) == FAILURE) { + WRONG_PARAM_COUNT; + } + + if (Z_TYPE_PP(keys) != IS_ARRAY) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "First parameter must be an array"); + RETURN_FALSE; + } + + /* Initialize return array */ + array_init(return_value); + + if (!zend_hash_num_elements(Z_ARRVAL_PP(keys))) { + return; + } + + if (PZVAL_IS_REF(*val)) { + SEPARATE_ZVAL(val); + } + + zend_hash_internal_pointer_reset_ex(Z_ARRVAL_PP(keys), &pos); + while (zend_hash_get_current_data_ex(Z_ARRVAL_PP(keys), (void **)&entry, &pos) == SUCCESS) { + zval_add_ref(val); + + if (Z_TYPE_PP(entry) == IS_STRING || Z_TYPE_PP(entry) == IS_UNICODE) { + zend_u_symtable_update(Z_ARRVAL_P(return_value), Z_TYPE_PP(entry), Z_UNIVAL_PP(entry), Z_UNILEN_PP(entry) + 1, val, sizeof(zval *), NULL); + } else if (Z_TYPE_PP(entry) == IS_LONG) { + zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_PP(entry), val, sizeof(zval *), NULL); + } else { + zval tmpkey; + + tmpkey = **entry; + zval_copy_ctor(&tmpkey); + convert_to_string(&tmpkey); + + zend_symtable_update(Z_ARRVAL_P(return_value), Z_STRVAL(tmpkey), Z_STRLEN(tmpkey) + 1, val, sizeof(zval *), NULL); + + zval_dtor(&tmpkey); + } + zend_hash_move_forward_ex(Z_ARRVAL_PP(keys), &pos); + } +} +/* }}} */ + + /* {{{ proto array range(mixed low, mixed high[, int step]) U Create an array containing the range of integers or characters from low to high (inclusive) */ PHP_FUNCTION(range) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.787&r2=1.788&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.787 php-src/ext/standard/basic_functions.c:1.788 --- php-src/ext/standard/basic_functions.c:1.787 Sun Jul 2 00:10:36 2006 +++ php-src/ext/standard/basic_functions.c Sat Jul 15 10:10:46 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.787 2006/07/02 00:10:36 bjori Exp $ */ +/* $Id: basic_functions.c,v 1.788 2006/07/15 10:10:46 helly Exp $ */ #include "php.h" #include "php_streams.h" @@ -380,6 +380,12 @@ ZEND_END_ARG_INFO() static +ZEND_BEGIN_ARG_INFO(arginfo_array_fill_keys, 0) + ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */ + ZEND_ARG_INFO(0, val) +ZEND_END_ARG_INFO() + +static ZEND_BEGIN_ARG_INFO_EX(arginfo_range, 0, 0, 2) ZEND_ARG_INFO(0, low) ZEND_ARG_INFO(0, high) @@ -3708,6 +3714,7 @@ PHP_FE(extract, arginfo_extract) PHP_FE(compact, arginfo_compact) PHP_FE(array_fill, arginfo_array_fill) + PHP_FE(array_fill_keys, arginfo_array_fill_keys) PHP_FE(range, arginfo_range) PHP_FE(array_multisort, arginfo_array_multisort) PHP_FE(array_push, arginfo_array_push) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/php_array.h?r1=1.54&r2=1.55&diff_format=u Index: php-src/ext/standard/php_array.h diff -u php-src/ext/standard/php_array.h:1.54 php-src/ext/standard/php_array.h:1.55 --- php-src/ext/standard/php_array.h:1.54 Sat Jun 3 18:58:40 2006 +++ php-src/ext/standard/php_array.h Sat Jul 15 10:10:46 2006 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_array.h,v 1.54 2006/06/03 18:58:40 andrei Exp $ */ +/* $Id: php_array.h,v 1.55 2006/07/15 10:10:46 helly Exp $ */ #ifndef PHP_ARRAY_H #define PHP_ARRAY_H @@ -54,6 +54,7 @@ PHP_FUNCTION(extract); PHP_FUNCTION(compact); PHP_FUNCTION(array_fill); +PHP_FUNCTION(array_fill_keys); PHP_FUNCTION(range); PHP_FUNCTION(shuffle); PHP_FUNCTION(array_multisort); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/array/array_fill_keys.phpt?view=markup&rev=1.1 Index: php-src/ext/standard/tests/array/array_fill_keys.phpt +++ php-src/ext/standard/tests/array/array_fill_keys.phpt --TEST-- basic array_fill_keys test --FILE-- <?php var_dump(array_fill_keys('test', 1)); var_dump(array_fill_keys(array(), 1)); var_dump(array_fill_keys(array('foo', 'bar'), NULL)); var_dump(array_fill_keys(array('5', 'foo', 10, 1.23), 123)); var_dump(array_fill_keys(array('test', TRUE, 10, 100), '')); ?> --EXPECTF-- Warning: array_fill_keys(): First parameter must be an array in %s on line %d bool(false) array(0) { } array(2) { ["foo"]=> NULL ["bar"]=> NULL } array(4) { [5]=> int(123) ["foo"]=> int(123) [10]=> int(123) ["1.23"]=> int(123) } array(4) { ["test"]=> string(0) "" [1]=> string(0) "" [10]=> string(0) "" [100]=> string(0) "" } --UEXPECTF-- Warning: array_fill_keys(): First parameter must be an array in %s on line %d bool(false) array(0) { } array(2) { [u"foo"]=> NULL [u"bar"]=> NULL } array(4) { [5]=> int(123) [u"foo"]=> int(123) [10]=> int(123) [u"1.23"]=> int(123) } array(4) { [u"test"]=> unicode(0) "" [1]=> unicode(0) "" [10]=> unicode(0) "" [100]=> unicode(0) "" } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php