Re: Re: Sorting times
| From: | German Geek | Date: | Sun, 15 Feb 2009 22:39:57 +0000 |
| Subject: | Re: Re: Sorting times | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-288289@lists.php.net to get a copy of this message | ||
The easiest would probably to use
http://nz.php.net/manual/en/function.strnatcmp.php
. It would happen to sort
it the right way because am is before pm ;-).
You can of course make it more challenging by converting it into a timestamp
etc. That would be better if you want to sort by date as well etc. If you go
that way you should look at http://nz.php.net/manual/en/function.usort.php
.
Regards,
Tim
Tim-Hinnerk Heuer
http://www.ihostnz.com
Alanis Morissette - "We'll love you just the way you are if you're
perfect."
2009/2/15 Shawn McKenzie <nospam@mckenzies.net>
> Shawn McKenzie wrote:
> > tedd wrote:
> >> Hi gang:
> >>
> >> Anyone have/know a routine that will sort an array of times?
> >>
> >> For example, a function that would take an array like this:
> >>
> >> time[0] ~ '1:30pm'
> >> time[1] ~ '7:30am'
> >> time[2] ~ '12:30pm'
> >>
> >> and order it to:
> >>
> >> time[0] ~ '7:30am'
> >> time[1] ~ '12:30pm'
> >> time[2] ~ '1:30pm'
> >>
> >>
> >> Cheers,
> >>
> >> tedd
> >>
> >>
> >
> > Not tested:
> >
> > function time_sort($a, $b)
> > {
> > if (strtotime($a) == strtotime($b)) {
> > return 0;
> > }
> > return (strtotime($a) < strtotime($b) ? -1 : 1;
> > }
> >
> > usort($time, "time_sort");
> >
> Well, I just thought, since the strtotime() uses the current timestamp
> to calculate the new timestamp, if you only give it a time then the
> returned timestamp is today's date with the new time you passed. If you
> had a large array and the callback started at 23:59:59 then you could
> end up with some times from the date it started and some from the next
> day, which of course would not be sorted correctly with respect to times
> only. So, this might be better (not tested):
>
>
> function time_sort($a, $b)
> {
> static $now = time();
>
> if (strtotime($a, $now) == strtotime($b, $now)) {
> return 0;
> }
> return (strtotime($a, $now) < strtotime($b, $now) ? -1 : 1;
> }
>
>
> --
> Thanks!
> -Shawn
> http://www.spidean.com
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>