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

Reply via email to