#12572 [Opn]: sort() doesn't reindex 1 element arrays at 0

From: Date: Wed, 14 Aug 2002 15:44:37 +0000
Subject: #12572 [Opn]: sort() doesn't reindex 1 element arrays at 0
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-16782@lists.php.net to get a copy of this message
ID: 12572 User updated by: adam@trachtenberg.com Reported By: adam@trachtenberg.com Status: Open Bug Type: Scripting Engine problem -Operating System: Redhat Linux 7.0 +Operating System: Redhat Linux 7.3 PHP Version: 4.2.2 New Comment: Updating OS; I'm now running RH 7.3 Previous Comments: ------------------------------------------------------------------------ [2002-08-14 09:22:04] kalowsky@php.net Updating the version ------------------------------------------------------------------------ [2002-08-14 01:17:46] adam@trachtenberg.com I just tested it with the latest CVS and it still happens. ------------------------------------------------------------------------ [2002-08-13 23:45:45] kalowsky@php.net This bug has been fixed in CVS. You can grab a snapshot of the CVS version at http://snaps.php.net/. In case this was a documentation problem, the fix will show up soon at http://www.php.net/manual/. In case this was a PHP.net website problem, the change will show up on the PHP.net site and on the mirror sites. Thank you for the report, and for helping us make PHP better. I believe rodif_bl fixed this in the current CVS. Give it a try if you can. ------------------------------------------------------------------------ [2001-10-21 01:47:06] sniper@php.net Reproduced with PHP 4.1.0RC1 ------------------------------------------------------------------------ [2001-08-05 01:21:24] adam@trachtenberg.com sort() reindexes arrays of length > 1 at 0, but doesn't do this for 1 element arrays. The following patch, fixes this minor inconsistancy. Please review it carefully, my C is rusty and I don't normally play with these files. It does build and seem to run correctly for me, with limited testing. -adam Here is an example: $array = array(2 => 'foo', 'bar'); sort($array); print_r($array); Array ( [0] => bar [1] => foo ) But, $array = array(2 => 'foo'); sort($array); print_r($array); Array ( [2] => foo ) --- zend_hash.c Sun Aug 5 01:17:22 2001 +++ /home/adam/zend_hash.c Sun Aug 5 00:54:21 2001 @@ -1097,6 +1097,13 @@ IS_CONSISTENT(ht); if (ht->nNumOfElements <= 1) { /* Doesn't require sorting */ + if (ht->nNumOfElements == 1 && renumber) { /* Renumber 1 element arrays to O */ + p = ht->pListHead; + p->nKeyLength = 0; + p->h = 0; + ht->nNextFreeElement = 1; + zend_hash_rehash(ht); + } return SUCCESS; } arTmp = (Bucket **) pemalloc(ht->nNumOfElements * sizeof(Bucket *), ht->persistent); ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=12572&edit=1

« previous php.bugs (#16782) next »