On Jan 16, 2015, at 19:18, Xinchen Hui <larue...@php.net> wrote: > > Hey: > > >> On Sat, Jan 17, 2015 at 8:20 AM, Rasmus Lerdorf <ras...@lerdorf.com> wrote: >>> On 01/16/2015 03:54 PM, Simon J Welsh wrote: >>> That’s an invalid comparison function. It causes the current usort to >>> reverse sort the array and I see no problem with that changing (you’re >>> saying that a value for $a less than $b is in fact greater than it, and a >>> value of $b less than or equal to $a is equal to it). >> >> Your didn't make much sense. But yes, I am aware it is a weird >> comparison function taken from an existing app which is now broken under >> PHP7 but it only breaks if the array grows beyond 16 elements. >> If we are going to make a BC change here, it shouldn't be in a way that >> is dependent on the size of the array being sorted. > > I suggest you use : > > function cmp($a,$b) { > return strtotime($a['date']) - strtotime($b['date']); > } > > as our usort doc said: > > "The comparison function must return an integer less than, equal to, > or greater than zero if the first argument is considered to be > respectively less than, equal to, or greater than the second." > > otherwise, it's not a defined behavior
Yes, like I said, I am aware that the comparison function is flaky but it is still code that has worked for 15 years so we have to be clear about the BC break. The fact that it works up until the array gets more than 16 elements makes it a tricky one to track down for people. With the massive volume of legacy code out there we have to be careful with changes like this that can break existing code, even if that code is questionable. At the very least we need a clear note in the upgrading doc reminding people to check all their user comparison functions. -Rasmus
smime.p7s
Description: S/MIME cryptographic signature