我有一个简单的 PHP 行李提取和返回管理工具。 它会为所有到达的行李以及提取时间生成一个列表。
我所做的是遍历数据库以加载特定日期的所有预订。
示例
$query = mysql_query("SELECT * FROM `luggage_requests` WHERE
`request_start`='".date("Y-m-d")."'
OR
`request_end`='".date("Y-m-d")."'");
然后我将所有预订从这个结果中加载到一个数组中。
示例
$requests[] = $row["request_id"];
我还会载入客户来取行李的时间。
示例
///######## DETERMINE THE IN OUT STATE
if($row["request_start" == date("Y-m-d")){
///######## ASSIGN THE CORRECT TIME
$request_times[] = (int)str_replace(":", "", $row["request_time1"]);
}
///########
elseif($row["request_eind"] == date("Y-m-d" ){
///######## ASSIGN THE CORRECT TIME
$request_times[] = (int)str_replace(":", "", $row["request_time2"]);
}
此列表根据客户放下或领取行李的时间进行排序,我使用 *array_multisort* 进行排序。
一般会在两三天后取行李。
然而,在某些情况下,它会在同一天的稍后时间再次被提取。 我的代码构造的问题是系统只会显示一次相同的预订。
如果客户当天返回。它只会显示客户来放下行李的那一刻。但不是他或她来取的时间。
我完全不知道如何以任何干净整洁的方式解决这个问题。
因为我不能加载同一个变量两次然后逻辑排序。 但我越来越多地遇到这个问题。
谁知道怎么解决?
非常感谢。
完整代码如下:
<?php
///######## QUERY TO PLACE ALL ITEMS INTO AN ARRAY
$inout_parse_query = mysql_query("SELECT * FROM `luggage_requests` WHERE `request_start`='".date("Y-m-d")."' OR `request_end`='".date("Y-m-d")."'") or die(mysql_error());
while ($row = mysql_fetch_array($inout_parse_query)) {
///######## IF THE REQUEST HAS NOT BEEN SAVED ALREADY
if(!in_array($row["request_id"], $requests)){
///######## SAVING ALL IDS INTO AN ARRAY
$requests[] = $row["request_id"];
///######## DETERMINE THE IN OUT STATE
if($row["request_start" == date("Y-m-d")){
///######## ASSIGN THE CORRECT TIME
$request_times[] = (int)str_replace(":", "", $row["request_time1"]);
}
///########
elseif($row["request_eind"] == date("Y-m-d" ){
///######## ASSIGN THE CORRECT TIME
$request_times[] = (int)str_replace(":", "", $row["request_time2"]);
}
}
}
///######## SORT THE ARRAYS AT THE HAND OF THE TIME
array_multisort($request_times, $requests);
?>
super 棒!!谢谢回复!!我不明白你的解决方案是什么。但是第一个有效!在小测试环境下试了一下!并且有效。
第二,我有一些新东西要学习,您的解决方案为我进一步学习提供了良好的开端。一百万!
最佳答案
if(!in_array($row["request_id"], $requests))
是不是这条线让你感到困惑。在某些情况下,您需要将请求保存两次 - 一次用于送货,一次用于取件。
$resultSet = array();
while ($row = mysql_fetch_array($inout_parse_query))
{
if ( $row["request_start"] == date('Y-m-d') )
{
$row["sortby"] = $row["request_time1"];
$resultSet[] = $row;
}
if ( $row["request_eind"] == date('Y-m-d') )
{
$row["sortby"] = $row["request_time2"];
$resultSet[] = $row;
}
}
usort($resultSet,'sortluggage');
function sortluggage($a, $b)
{
if ($a["sortby"] == $b["sortby"]) { return 0; }
return ($a["sortby"] < $b["sortby"]) ? -1 : 1;
}
关于PHP 对同一项目进行两次多重排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963721/