我在数组中使用时间戳作为值,例如:
我想要做的是从我的阵列BUT获得最接近的时间戳,如果此时间戳高于当前时间戳(最接近的>当前时间戳),则得到较低的值。
这是一个例子来说明我的观点,它是19/02/2016 10h58,我不想得到1455879600(19/02/2016 11h00)但是1455874500(19/02/2016 09h35)然后,当它是19/02/2016 11h00,得到1455879600。
我一直在研究这段代码:
function find_closest($id, $date_now){
global $cnx;
$sql = "select position_history from worksheets WHERE id = $id LIMIT 1";
$stmt = $cnx->prepare($sql);
try {
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_OBJ);
}
catch (PDOException $e) {
echo $e->getMessage();
}
$pos_lane = unserialize($result->position_history);
$i=0;
$array = array();
foreach ($pos_lane as $item) {
// $exp[2] : timestamp
$exp = explode("|", $pos_lane[$i]);
$array[$exp[1]] = $exp[2];
$i++;
}
$mostrecent = "0";
foreach($array as $timestampmove)
{
if ($timestampmove > $mostrecent && $timestampmove < $date_now) {
$mostrecent = $timestampmove;
}
}
$closeto = array_search($mostrecent,$array);
return $closeto;
}
目的是在今天之前选择最新的时间戳,但它似乎并不像我想的那样工作......
也许你有更好的解决方案?
谢谢你!答案 0 :(得分:1)
为什么不让它更简单并让原始的sql查询为你工作?
$sql = "select MAX(position_history) from worksheets WHERE id = $id and position_history < now() LIMIT 1";
答案 1 :(得分:0)
您可以尝试以下方法:
foreach ($pos_lane as $item) {
// $exp[2] : timestamp
$exp = explode("|", $pos_lane[$i]);
$array[$exp[1]] = (int) $exp[2]; // <<< cast to int
$i++;
}
$mostrecent = 0;
$closeto = null;
foreach($array as $key => $timestampmove)
{
if ($timestampmove < $date_now) { // <<< make sure $date_now is a Unix timestamp
if ($mostrecent < $timestampmove) {
$mostrecent = $timestampmove;
$closeto = $key;
}
}
}
return $closeto;