我有3个数据表存储在数据库中,每个数据库包含一个日期和时间字段。我从每个表中提取所有相关数据并将它们连接到一个数组。我现在需要先按日期对数组进行排序,然后再对时间进行排序。我目前按日期排序,工作正常,但时间有时可能是正确的,有时是错误的
我目前正用于收集数据:
[_manager performSelector:@selector(setAllowsBackgroundLocationUpdates:) withObject:@{1}];
我用它来分类
$results = [];
$sql_assign = mysql_query("SELECT * FROM `tk_assign` WHERE ticket_id = $tk_id");
$sql_update = mysql_query("SELECT * FROM `tk_update` WHERE ticket_id = $tk_id");
$sql_status = mysql_query("SELECT * FROM `tk_status_change` WHERE ticket_id = $tk_id");
while($row = mysql_fetch_assoc($sql_assign)){
$results[] = $row;
}
while($row = mysql_fetch_assoc($sql_update)){
$results[] = $row;
}
while($row = mysql_fetch_assoc($sql_status)){
$results[] = $row;
}
我已经考虑过把它变成时间码,但这也没有用。任何帮助将不胜感激
示例时间和日期:
$orderByDate = $my2 = array();
foreach($results as $key=>$row)
{
$my2 = explode('/',$row['date']);
$my3 = explode('/',$row['time']);
$my_date2 = $my2[1].'/'.$my2[0].'/'.$my2[2];
$orderByDate[$key] = strtotime($my_date2);
}
$sorted = array_multisort($orderByDate, SORT_ASC, $results);
答案 0 :(得分:0)
如果您使用PHP > 5.2
,则应使用以下方式。
$orderByDate = $my2 = array();
foreach($results as $key=>$row)
{
$myDateTime = DateTime::createFromFormat('d/m/Y', $date);
$newDateString = $myDateTime->format('Y-m-d');
$orderByDate[$key] = strtotime($newDateString." ".$row['time']);
}
$sorted = array_multisort($orderByDate, SORT_ASC, $results);
答案 1 :(得分:0)
我认为这一行是错误的:
$my3 = explode('/',$row['time']);
可能应该是:
$my3 = explode(':',$row['time']);
在任何情况下,您甚至都没有在排序算法中使用$my3
变量。
这是另一种解决方案。合并数组后,添加以下代码:
for ($i =0; $i < count($results); $i++){
$results[$i]['datetime'] = $results[$i]['date'].' '.$results[$i]['time'];
}
function compareDateTime($a, $b) {
$mya = new DateTime();
$mya->createFromFormat('d/m/Y H:i:s', $a['datetime']);
$myb = new DateTime();
$myb->createFromFormat('d/m/Y H:i:s', $b['datetime']);
if ($mya == $myb)
return 0;
if ($mya > $myb)
return 1;
return -1;
}
usort($results, 'compareDateTime');