【问题标题】:Multidimensional Array Between Dates and Total Price日期和总价之间的多维数组
【发布时间】:2013-03-08 10:03:36
【问题描述】:

我正在尝试制作 PHP 数组,这是我的示例。

每个数组的第一行是唯一的记录号“[767962]”

在该数组酒店房间 id 第一行之后。
第二个是酒店名称
第 3 和第 4 是
之间的第一个价格范围 第五是价格

Array 

( 

    [767962] => Array /// --secial id for price record--//

    ( 

        [0] => 42923 /// --hotelroomid--//

        [1] => Crystal Hotels Kemer Deluxe Resort /// --Hotel Name--//

        [2] => 2013-04-01 /// --Start date--//

        [3] => 2013-05-16 /// --End Date--//

        [4] => 179 /// --Price --//

    ) 

    [767964] => Array 

    ( 

        [0] => 42923 

        [1] => Crystal Hotels Kemer Deluxe Resort 

        [2] => 2013-05-17 

        [3] => 2013-05-26 

        [4] => 239 

    ) 

    [767980] => Array 

    ( 

        [0] => 42940 

        [1] => Rixos Deluxe Resort 

        [2] => 2013-03-02 

        [3] => 2013-05-26 

        [4] => 340 

    ) 

) 

这是预期的输出。

我想知道那个酒店房间 2013-05-14 - 2013-05-21 之间的总价

1 , 42923 , Crystal Hotels Kemer Deluxe Resort , 2013-05-14 , 2013-05-21 , 1553

2 , 42940 , Rixos Deluxe Resort                , 2013-05-14 , 2013-05-21 , 2380

例如 1553 是 2013-05-14 - 2013-05-21 日期之间的总价。
2013-05-14 - 179
2013-05-15 - 179
2013-05-16 - 239
2013-05-17 - 239
2013-05-18 - 239
2013-05-19 - 239
2013-05-20 - 239
2013-05-21 - 239

总数为 1553

【问题讨论】:

  • 你试过了吗? DateTime 相关类非常简单(虽然有点长)。即使您使用的是 PHPstrtotime 仍然可行。
  • 您应该使用数据库存储数据并使用适当的 SQL 查询来提取信息。
  • 另外,“Rixos”房间呢? 17号才开始,但要14号开始行程,17号之前要住哪里,这个价格是怎么来的?
  • 这是它来自 SQL 数据库的结果,我转换为数组。唯一的解决方案是使用和数组来查找结果。我可以询问每个日期的每日价格,但这会产生大量的采石量并加载到服务器上。
  • 我刚刚修复了它,这是一个例子,实际上我现在写它作为一个例子我的错误对不起:)

标签: php arrays date multidimensional-array date-range


【解决方案1】:

兄弟,我在我的应用程序中做了这种工作,我认为这对你很有帮助,但如果出现问题,请告诉我,我会改变......

例如请参考此链接Demo;

$room_id = 42923;
$start_date = "2013-05-10 00:00:00";
$end_date = "2013-05-21 00:00:00";

查找上述两个日期之间的日期

        $day = 86400; // Day in seconds  
        $format = 'Y-m-d'; // Output format (see PHP date funciton)  
        $sTime = strtotime($start_date); // Start as time  
        $eTime = strtotime($end_date); // End as time  
        $numDays = round(($eTime - $sTime) / $day) + 1;  
        $days = array();  

        for ($d = 0; $d < $numDays; $d++) {  
            $days[] = date($format, ($sTime + ($d * $day)));  
        } 

现在对于每个日期,您需要检查它落在哪个数组中

foreach($days as $key => $d)
{
    foreach($data as $key1 => $dat)
    {
        if($dat[0] == $room_id) {
            if($d >=  $dat[2] && $d<= $dat[3]) {
                $amount += $dat[4];
            }
        }
    }
}
echo $amount;

【讨论】:

  • 谢谢 :) 它越来越近了,但实际上我猜代码有问题,但它给了我一个想法谢谢
  • 曼恩你太棒了!!非常感谢:) 我一生中得到的最好的代码和帮助相信我。我打电话给我的大多数朋友,没有人帮助我,但你帮助了我:)再次感谢......祝你有美好的一天
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
相关资源
最近更新 更多