如何按时间顺序对数组进行排序?

Emm*_*myS 8 php arrays sorting time

我有一个非关联数组,其中输入的数据没有排序(我从外部系统接收数据,并且不能强制它按排序顺序进入数组.)有没有办法对值进行排序?我试过这个:

$wedTrackTimes = array("9:30 AM-10:30 AM", "8:15 AM-9:15 AM", "12:30 PM-1:30 PM", "2:00 PM-3:00 PM", "3:30 PM-4:30 PM");
$wedTrackTimes = array_unique($wedTrackTimes);
$wedTrackTimes = sort($wedTrackTimes);
print_r($wedTrackTimes);
Run Code Online (Sandbox Code Playgroud)

但它没有返回一个排序的数组,而是返回1.我假设它是因为它是非关联的,所以没有键.有没有办法按值排序数组?我们确实需要在上午8:15时段之后的上午9:30时段,应该这样.

UPDATE

感谢大家的答案; 确实使数组排序,但不如预期.如果我使用默认排序类型,我得到这个:

Array
(
    [0] => 12:30 PM-1:30 PM
    [1] => 2:00 PM-3:00 PM
    [2] => 3:30 PM-4:30 PM
    [3] => 8:15 AM-9:15 AM
    [4] => 9:30 AM-10:30 AM
)
Run Code Online (Sandbox Code Playgroud)

使用SORT_NUMERIC我得到这个:

Array
(
    [0] => 2:00 PM-3:00 PM
    [1] => 3:30 PM-4:30 PM
    [2] => 8:15 AM-9:15 AM
    [3] => 9:30 AM-10:30 AM
    [4] => 12:30 PM-1:30 PM
)
Run Code Online (Sandbox Code Playgroud)

使用SORT_STRING我得到这个:

Array
(
    [0] => 12:30 PM-1:30 PM
    [1] => 2:00 PM-3:00 PM
    [2] => 3:30 PM-4:30 PM
    [3] => 8:15 AM-9:15 AM
    [4] => 9:30 AM-10:30 AM
)
Run Code Online (Sandbox Code Playgroud)

我需要的是:

Array
(
    [0] => 8:15 AM-9:15 AM
    [1] => 9:30 AM-10:30 AM
    [2] => 12:30 PM-1:30 PM
    [3] => 2:00 PM-3:00 PM
    [4] => 3:30 PM-4:30 PM


)
Run Code Online (Sandbox Code Playgroud)

这可能吗?

cwa*_*ole 21

按引用排序(这意味着它会对传递给它的任何内容进行排序),它会根据失败返回true/false.你在这做什么:

$wedTrackTimes = sort($wedTrackTimes);
Run Code Online (Sandbox Code Playgroud)

将值$ wedTrackTimes赋值为TRUE或FALSE.

尝试

sort($wedTrackTimes);
print_r($wedTrackTimes);
Run Code Online (Sandbox Code Playgroud)


Dev*_*oot 5

那是对的,排序回报bool.只需使用:

sort($wedTrackTimes);
Run Code Online (Sandbox Code Playgroud)


phi*_*hag 5

sort像所有php的排序功能一样,就地排序.如果排序成功则返回true,否则返回false.如果您只对字符串/数字进行排序,则此结果无关紧要.

$wedTrackTimes = array("9:30 AM-10:30 AM", "8:15 AM-9:15 AM",
                       "12:30 PM-1:30 PM", "2:00 PM-3:00 PM", "3:30 PM-4:30 PM");
$wedTrackTimes = array_unique($wedTrackTimes);
sort($wedTrackTimes);
print_r($wedTrackTimes);
Run Code Online (Sandbox Code Playgroud)

是要走的路.


cwa*_*ole 5

所以,看起来你正在寻找比标准排序更先进的东西.

// WARNING: THIS IS *NOT* BY REFERENCE. IT RETURNS A NEW ARRAY.
function getSortedTimes(array $group)
{
    $tmp = array();
    foreach( $group as $times )
    {
        // Basically, I am pairing the string for the start time with 
        // a numeric value.
        $tmp[$times] = strtotime(substr($times, 0, strpos($times, '-')));
    }
    // asort is like sort, but it keeps the pairings just created.
    asort($tmp);
    // the keys of $tmp now refer to your original times.
    return array_keys($tmp);
}
Run Code Online (Sandbox Code Playgroud)