PHP 对同一项目进行两次多重排序

标签 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);

?>

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/

相关文章:

php - 使用 PHP 和 MySQL 进行列行对齐

PHP 复制数据库 session 故障转移

php - 标记为 UTF-16 的文档但在 Entity PHP 错误中包含 UTF-8 内容

php - 在数组中存储函数

php - 有人能告诉我使用 Zend Frameworks 而不是简单的 PHP 有哪些优势吗?

MySql通过ssh备份和恢复丢失连接错误

mysql - Laravel 4.2 Group by 和 orderby ID DESC

PHP/MySQL - 令人困惑的查询

JavaScript 函数 : Returning value after a split

javascript - 根据共同共享的 id 组合两个数组上的对象