PHP多次输出相同的项目两次

时间:2013-11-13 20:30:44

标签: php mysql arrays sorting

我在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);

?>

超级!!谢谢回复!!我不明白你的解决方案是什么。但是第一次它有效!在一个小的测试环境中试过它!它有效。

第二,我有一些新的东西需要学习,你的解决方案让我有了一个良好的开端,可以进一步学习。万分感谢!!

1 个答案:

答案 0 :(得分: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;
}