Bug #14591 Updated: uasort mixes array with equal elements
| From: | eved_hashem at lycos dot com | Date: | Fri, 22 Mar 2002 02:14:20 +0000 |
| Subject: | Bug #14591 Updated: uasort mixes array with equal elements | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-3115@lists.php.net to get a copy of this message | ||
ID: 14591
Updated by: eved_hashem@lycos.com
Reported By: jan@horde.org
Status: Open
Bug Type: Arrays related
Operating System: Linux/Windows
PHP Version: 4.1.0
New Comment:
I just want to report that the example code for the uasort function in
the PHP manual does not work and nothing gets sorted.. I've tried for
hours and using multiple books to get uasort to work with
multidimensional associative arrays and I have had no success... Am I
possibly printing out the arrays incorrectly?? This is what i Used to
display the sorted array in the example in the PHP manual:
for ( $row = 0; $row < 3; $row++ )
{
while (list($key, value) = each ($array[ $row] ) )
{
echo "|$value";
}
echo "|<BR>";
}
this can be the only possible thing I find that could be wrong.. if my
code is not incorrect than this is a bug in the program..
Previous Comments:
------------------------------------------------------------------------
[2001-12-19 05:19:40] mfischer@php.net
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.
------------------------------------------------------------------------
[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