1

我有一个简单的 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);

?>

极好的!!谢谢回复!!我不明白你的解决方案是什么。但第一个它有效!在小型测试环境中试了一下!它有效。

第二,我有一些新的东西要学,你的解决方案给了我进一步学习的良好开端。太感谢了!!

4

1 回答 1

1
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;
}
于 2013-11-13T21:22:22.113 回答