0

我正在从 SQL 语句中获取一些元素,并将它们放入一个数组中。

我想要做的是找到数组中这些元素的日期之间的具体差异,并将它们添加到另一个数组中。

数据库的结果如下所示(key=>value):

array(
    "10"=>"13-02-2013 09:47:16", 
    "10"=>"13-02-2013 09:47:00", 
    "10"=>"13-02-2013 09:46:50",  
    "10"=>"13-02-2013 09:42:50", 
    "20"=>"13-02-2013 09:30:50", 
    "20"=>"13-02-2013 09:20:50", 
    "30"=>"13-02-2013 09:10:15"
);

我需要找到那些具有相同 ID(键)的元素,其中日期之间的差异小于 60 秒。例如,我想要一个这样的输出:

array(
    "10"=>"13-02-2013 09:47:16", 
    "10"=>"13-02-2013 09:47:00", 
    "10"=>"13-02-2013 09:46:50"
);

谢谢你的帮助!

4

2 回答 2

0

一个数组不能多次使用同一个键。每个元素都有唯一的键。
每当您尝试读取此数组时,它将显示:

Array
(
[10] => 13-02-2013 09:42:50
[20] => 13-02-2013 09:20:50
[30] => 13-02-2013 09:10:15
)

如果要检索键为“10”的所有元素,则必须在从数据库中检索数据时使用多维数组。

$new_arr = array();
// Put database data object in place of $arr
foreach($arr as $k => $v){
    if(array_key_exists($k,$new_arr)){
        $new_arr[$k][] = $v;
    }
    else{
        $new_arr[$k] = $v;
    }
}

这里 $new_arr 将采用以下形式:

$new_arr = array("10"=> array([0] => '13-02-2013 09:47:16'),
                        array([1] => '13-02-2013 09:47:00'),
                        array([2] => '13-02-2013 09:46:50'),
                 "20" => '',
                  ........
               )

然后你可以选择任何你想要的值。

于 2013-02-13T11:30:46.550 回答
0

嗯,我引用 abc667 和 Jon,但是如果你想比较日期,你可以用一个简单的 for 扫描所有数组,并比较数组中的当前日期和下一个.. 如果你使用 for 和一个名为 $cont 的变量,如果 $ cont = 1 第一个日期是 $array[1] ($array[$cont]),第二个日期是 $array[2] ($array[$cont+1])。我已经做了一个简单的例子(如果它运行了,我希望看到它,但我希望;P)看起来你的数组在我的例子中被称为$array_dates并且 ivent 创建了新的数组,但它很简单,你在 for 循环中添加它。

<?php

// example >>> $array_dates[1] = '2013-2-13 12:30:00'; 

// scan all the array with the date
for ($cont=0; $cont<count($array_dates); $cont++)
    {
    $date_1 = $array_dates[$cont];
    $date_2 = $array_dates[$cont+1];

list($data1,$His1) = explode(' ',$date_1); 
list($year1,$month1,$day1) = explode('-',$data1); 
list($hour1,$min1,$sec1) = explode(':',$His1); 

list($data2,$His2) = explode(' ',$date_2); 
list($year2,$month2,$day2) = explode('-',$data2); 
list($hour2,$min2,$sec2) = explode(':',$His2); 

$diff=mktime($hour2,$min2,$sec2,$month2,$day2,$year2)-mktime($hour1,$min1,$sec1,$month1,$day1,$year1); 

$diff = mktime($hour2, $min2,$sec2, $month2,$day2,$year2) - mktime($hour1,$min1,$sec1, $month1,$day1,$year1); 

$diff1  = floor($diff % (60*60*24)); 
$diff2  = floor($diff1 % (60*60)) ; 
$sec    = $diff2 % 60; 


echo "<br>Seconds difference from <u>$date_1</u> and <u>$date_2</u>: <em>$sec</em><br>";

} //end of the for cycle
?>

我希望你会欣赏它,最好的问候。

编辑:

你必须把月份放在我放的格式中,因为 mktime 在数字之前会出现零(它认为是八进制!)......但是你可以在 php.net 中读取日期格式

于 2013-02-13T11:32:19.537 回答