derick Wed Sep 15 07:50:28 2004 EDT Modified files: /php-src/ext/standard array.c Log: - Added new boolean (fourth) parameter to array_slice() that turns on the preservation of keys in the returned array. http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.274&r2=1.275&ty=u Index: php-src/ext/standard/array.c diff -u php-src/ext/standard/array.c:1.274 php-src/ext/standard/array.c:1.275 --- php-src/ext/standard/array.c:1.274 Sat Sep 11 10:22:35 2004 +++ php-src/ext/standard/array.c Wed Sep 15 07:50:27 2004 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: array.c,v 1.274 2004/09/11 14:22:35 derick Exp $ */ +/* $Id: array.c,v 1.275 2004/09/15 11:50:27 derick Exp $ */ #include "php.h" #include "php_ini.h" @@ -2092,7 +2092,8 @@ zval **input, /* Input array */ **offset, /* Offset to get elements from */ **length, /* How many elements to get */ - **entry; /* An array entry */ + **entry, /* An array entry */ + **z_preserve_keys; /* Whether to preserve keys while copying to the new array or not */ int offset_val, /* Value of the offset argument */ length_val, /* Value of the length argument */ num_in, /* Number of elements in the input array */ @@ -2103,10 +2104,11 @@ uint string_key_len; ulong num_key; HashPosition hpos; + zend_bool preserve_keys = 0; /* Get the arguments and do error-checking */ argc = ZEND_NUM_ARGS(); - if (argc < 2 || argc > 3 || zend_get_parameters_ex(argc, &input, &offset, &length)) { + if (argc < 2 || argc > 4 || zend_get_parameters_ex(argc, &input, &offset, &length, &z_preserve_keys)) { WRONG_PARAM_COUNT; } @@ -2120,12 +2122,17 @@ is not passed */ convert_to_long_ex(offset); offset_val = Z_LVAL_PP(offset); - if (argc == 3) { + if (argc >= 3) { convert_to_long_ex(length); length_val = Z_LVAL_PP(length); } else { length_val = zend_hash_num_elements(Z_ARRVAL_PP(input)); } + + if (ZEND_NUM_ARGS() > 3) { + convert_to_boolean_ex(z_preserve_keys); + preserve_keys = Z_BVAL_PP(z_preserve_keys); + } /* Initialize returned array */ array_init(return_value); @@ -2169,8 +2176,12 @@ break; case HASH_KEY_IS_LONG: - zend_hash_next_index_insert(Z_ARRVAL_P(return_value), - entry, sizeof(zval *), NULL); + if (preserve_keys) + zend_hash_index_update(Z_ARRVAL_P(return_value), num_key, + entry, sizeof(zval *), NULL); + else + zend_hash_next_index_insert(Z_ARRVAL_P(return_value), + entry, sizeof(zval *), NULL); break; } pos++;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php