Along with fixing this bugs (16063 and 16068) I signifintly increased the
preformance of array_pop and array_shift.
Here are some times on a 1.2ghz athlon.
<?
$t = array_fill(0, $size, "test");
for($i = 0;$i < $size;$i++)
array_pop($t);
?>
Before:
$size = 2000; //1.633s
$size = 4000; //8.942s
$size = 6000; //24.005s
$size = 10000; //1m13.986s
After:
$size = 2000; //0.050s
$size = 4000; //0.060s
$size = 6000; //0.081s
$size = 10000; //0.090s
I still would like to see the functions array_unshift, array_splice and
array_pad looked into to increase preformance too.
I thought i had karma but it seems i don't. So can someone ither give me the
karma or patch it themselves.
-brad
__________________________________________________
Do You Yahoo!?
Yahoo! Health - Feel better, live better
http://health.yahoo.com
Index: ext/standard/array.c
===================================================================
RCS file: /repository/php4/ext/standard/array.c,v
retrieving revision 1.172
diff -u -r1.172 array.c
--- ext/standard/array.c 8 Jul 2002 07:33:22 -0000 1.172
+++ ext/standard/array.c 30 Jul 2002 07:10:45 -0000
@@ -1661,8 +1661,9 @@
static void _phpi_pop(INTERNAL_FUNCTION_PARAMETERS, int off_the_end)
{
zval **stack, /* Input stack */
- **val; /* Value to be popped */
- HashTable *new_hash; /* New stack */
+ **val; /* Value to be popped */
+ char *key = NULL;
+ int key_len;
/* Get the arguments and do error-checking */
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &stack) == FAILURE) {
@@ -1689,10 +1690,8 @@
INIT_PZVAL(return_value);
/* Delete the first or last value */
- new_hash = php_splice(Z_ARRVAL_PP(stack), (off_the_end) ? -1 : 0, 1, NULL, 0,
NULL);
- zend_hash_destroy(Z_ARRVAL_PP(stack));
- efree(Z_ARRVAL_PP(stack));
- Z_ARRVAL_PP(stack) = new_hash;
+ zend_hash_get_current_key_ex(Z_ARRVAL_PP(stack), &key, &key_len, &key_len, 0,
+NULL);
+ zend_hash_del_key_or_index(Z_ARRVAL_PP(stack), key, key_len, key_len, (key) ?
+HASH_DEL_KEY : HASH_DEL_INDEX);
}
/* }}} */
@@ -1747,7 +1746,8 @@
}
/* Use splice to insert the elements at the beginning. Destroy old
- hashtable and replace it with new one */
+ hashtable and replace it with new one */
+ zend_hash_insert
new_hash = php_splice(Z_ARRVAL_P(stack), 0, 0, &args[1], argc-1, NULL);
zend_hash_destroy(Z_ARRVAL_P(stack));
efree(Z_ARRVAL_P(stack));
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php