我有一个数组,该数组已存储来自MySQL数据库的结果。
$time = "14:51:00"
Array
(
[0] => Array
(
[name] => richard
[id] => 61
[chauffeurId] => 60
[lat] => 53.0291365
[lon] => 5.65739468598697
[pickupdate] => 2021-01-25
[departuretime] => 12:55:00
[arrivalTime] => 13:46:00
[finalDestination] => 5.81155877224893,52.9808856
)
[1] => Array
(
[name] => Jan
[id] => 64
[chauffeurId] => 63
[lat] => 53.19968475
[lon] => 5.80069089560234
[pickupdate] => 2021-01-25
[departuretime] => 12:45:00
[arrivalTime] => 13:51:00
[finalDestination] => 5.81155877224893,52.9808856
)
[2] => Array
(
[name] => richard
[id] => 61
[chauffeurId] => 60
[lat] => 53.0291365
[lon] => 5.65739468598697
[pickupdate] => 2021-01-25
[departuretime] => 13:49:00
[arrivalTime] => 14:50:00
[finalDestination] => 5.81155877224893,52.9808856
)
[3] => Array
(
[name] => joris
[id] => 59
[chauffeurId] => 58
[lat] => 52.9026474
[lon] => 5.59003021194087
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
[4] => Array
(
[name] => frans
[id] => 60
[chauffeurId] => 59
[lat] => 53.018652
[lon] => 5.533441
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
[5] => Array
(
[name] => henk
[id] => 62
[chauffeurId] => 61
[lat] => 53.02030965
[lon] => 5.53122986346911
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
[6] => Array
(
[name] => Joop
[id] => 65
[chauffeurId] => 64
[lat] => 52.9026474
[lon] => 5.59003021194087
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
)
我在这个数组中有两个数组,它们具有相等的['chauffeurId']。所以我只想要两者之一。我想要的那个,需要有['arrivaltime'],它最接近$ time变量中存储的时间。
然后,该数组应如下所示:
Array
(
[0] => Array
(
[name] => Jan
[id] => 64
[chauffeurId] => 63
[lat] => 53.19968475
[lon] => 5.80069089560234
[pickupdate] => 2021-01-25
[departuretime] => 12:45:00
[arrivalTime] => 13:51:00
[finalDestination] => 5.81155877224893,52.9808856
)
[1] => Array
(
[name] => richard
[id] => 61
[chauffeurId] => 60
[lat] => 53.0291365
[lon] => 5.65739468598697
[pickupdate] => 2021-01-25
[departuretime] => 13:49:00
[arrivalTime] => 14:50:00
[finalDestination] => 5.81155877224893,52.9808856
)
[2] => Array
(
[name] => joris
[id] => 59
[chauffeurId] => 58
[lat] => 52.9026474
[lon] => 5.59003021194087
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
[3] => Array
(
[name] => frans
[id] => 60
[chauffeurId] => 59
[lat] => 53.018652
[lon] => 5.533441
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
[4] => Array
(
[name] => henk
[id] => 62
[chauffeurId] => 61
[lat] => 53.02030965
[lon] => 5.53122986346911
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
[5] => Array
(
[name] => Joop
[id] => 65
[chauffeurId] => 64
[lat] => 52.9026474
[lon] => 5.59003021194087
[pickupdate] =>
[departuretime] =>
[arrivalTime] =>
[finalDestination] =>
)
)
有什么可能的方法可以做到这一点?
我能想到的最简单的方法是:
$result = [];
foreach ($array as $data) {
$id = &$data['chauffeurId'];
$data['timeDiff'] = abs($time - strtotime($data['arrivalTime']));
$result[$id] = !isset($result[$id]) || $result[$id]['timeDiff'] > $data['timeDiff']
? $data
: $result[$id];
}
print_r(array_values($result));
但是,如果要使用排序:
按时差对数组进行排序,然后迭代数组并存储每个id的时差。然后,检查是否已经迭代了当前ID,并且当前时差大于已迭代的ID,然后将其删除。
$timeDiffs = [];
$time = strtotime("14:51:00");
usort($array, function ($item1, $item2) use ($time) {
$diff1 = abs($time - strtotime($item1['arrivalTime']));
$diff2 = abs($time - strtotime($item2['arrivalTime']));
return $diff1 <=> $diff2;
});
foreach ($array as $key => $data) {
$id = &$data['chauffeurId'];
$timeDiff = abs($time - strtotime($data['arrivalTime']));
if (isset($timeDiffs[$id]) && $timeDiff > $timeDiffs[$id]) {
unset($array[$key]);
} else {
$timeDiffs[$id] = $timeDiff;
}
}
print_r($array);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句