首页 > 解决方案 > 在保持名称的同时按值中的时间对数组进行排序

问题描述

我有以下数组:数组( [10] => 06:30pm [20] => 04:00pm [30] => 05:15pm )

[]中的数字是id,后面的值是时间。我需要按时间对这个数组进行排序,同时保持这样的 id

数组( [20] => 04:00pm [30] => 05:15pm [10] => 06:30pm )

另请注意,时间也可以是上午或下午。

然后我需要将 [] 中的 id 提取为逗号分隔值。

任何人都可以帮忙吗?

标签: phparrayssortingtime

解决方案


试试这个

<?php
$time= ['10' => '06:30pm','20' => '04:00pm', '30' => '05:15am'];
$temp_time=array();
foreach ($time as $key => $value) {
    if(sizeof(explode("pm", $value))>1){
        $data=explode(":", $value);
        $data[0]=(int)$data[0]+12;
        $value=$data[0].':'.$data[1];

    }else{
        $data=explode(":", $value);
        if($data[0]=='12'){
            $value='00:'.$data[1];
        }else{
            $value=$data[0].':'.$data[1];
        }
    }
    $temp_time+=[$key => $value];
}
asort($temp_time);
$new_time=array();
foreach ($temp_time as $key => $value) {
    $new_time+=[$key => $time[$key]];
}
print_r($new_time);

输出:

Array ( [30] => 05:15am [20] => 04:00pm [10] => 06:30pm )

推荐阅读