Bug #14591 Updated: uasort mixes array with equal elements

From: Date: Wed, 19 Dec 2001 10:19:41 +0000
Subject: Bug #14591 Updated: uasort mixes array with equal elements
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-74354@lists.php.net to get a copy of this message
ID: 14591 Updated by: mfischer Reported By: jan@horde.org Old Status: Bogus Status: Open Bug Type: Arrays related Operating System: Linux/Windows PHP Version: 4.1.0 New Comment: Hartmut, I don't agree with you at all. This is a major BC problem. If case you haven't checked , PHP 4.0.6 and prior version doesn't change the sort order. I'ld like to hear what sterling can tell us about this. Not bogus, Reopened. Previous Comments: ------------------------------------------------------------------------ [2001-12-19 05:05:25] hholzgra@php.net well, you can't say that no sorting is needed in advance as uasort() does not know that your comparison function is going to return only zeros i'm not that deep into qsort implementations and, yes, i would expect qsort not to swap elements that are considered equal, but only for performance reasons ... (sterling might be able to tell you how and why zend_qsort does it internaly) besides that it is totaly ok that you get a different element order back as is still a valid order for your sort criteria good old "garbage in, garbage out" principle ;) ------------------------------------------------------------------------ [2001-12-19 04:31:47] jan@horde.org Hm, I'd rather expect that an array keeps untouched if there is no need to sort it. ------------------------------------------------------------------------ [2001-12-18 19:24:23] hholzgra@php.net and the problem is ...? by returning all zeros you made perfectly clear that you don't care about the order of elements in your array ;) ------------------------------------------------------------------------ [2001-12-18 17:03:19] jan@horde.org If you call uasort with a function that always returns 0 (elements equal) you get a totally screwed array returned. <?php function mysort($a, $b) { return 0; } $a = array('h', 's', 'i', 'c', 'q', 'm'); var_dump($a); uasort($a, 'mysort'); var_dump($a); ?> returns: array(6) { [0]=> string(1) "h" [1]=> string(1) "s" [2]=> string(1) "i" [3]=> string(1) "c" [4]=> string(1) "q" [5]=> string(1) "m" } array(6) { [1]=> string(1) "s" [2]=> string(1) "i" [3]=> string(1) "c" [4]=> string(1) "q" [5]=> string(1) "m" [0]=> string(1) "h" } ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=14591&edit=1

« previous php.dev (#74354) next »