I'm sure this has been discussed on here already, but I just discovered the usort() behaviour that was introduced in php 4.1.0 relating to "equal" values. Consider this scenario: <? class data_object { var $id; var $time; function data_object($id, $time) { $this->id = $id; $this->time = $time; } function do_sort($a,$b) { if($a->time == $b->time) return 0; return ($a->time > $b->time) ? 1 : -1; } } $a3 = new data_object(3, 400); $a2 = new data_object(2, 400); $a1 = new data_object(1, 400); $o_array[0] = &$a1; $o_array[1] = &$a2; $o_array[2] = &$a3; echo "<pre>"; print_r($o_array); // the array is in the right order here... echo "</pre>"; usort($o_array, array("data_object","do_sort")); echo "<pre>"; print_r($o_array); // here it's apparently in the order it is stored in memory... echo "</pre>"; ?>
There's obviously a couple workarounds in this simple case, but adding more member vars and defining objects in different places complicates things. This behaviour is a bug IMO. And yes I saw the note in the manual, but i still think this is counter-intuitive and has the chance to break people's code (it broke mine). Phil Dier <[EMAIL PROTECTED]> gett communications <http://www.gettcomm.com> gett labs, inc. <http://www.gettlabs.com> -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php