我从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"
);
感谢您的帮助!
答案 0 :(得分: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" => '',
........
)
然后你可以选择你想要的值。
答案 1 :(得分:0)
<?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
?>
我希望你会欣赏它, 最好的问候。
编辑: