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']가 동일한 배열이 두 개 있습니다. 그래서 나는 둘 중 하나만 원합니다. 내가 원하는 것은 $ time 변수에 저장된 시간에 가장 가까운 [ 'arrivaltime']이 있어야합니다.
그러면 배열은 다음과 같아야합니다.
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를 반복했는지 확인하고 현재 시간 차이가 이미 반복 한 것보다 큰지 확인한 다음 제거합니다.
$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] 삭제
몇 마디 만하겠습니다