配列がより大きく、 から までの期間の日付があるとし2009-10-01
ます2019-10-01
。2 つのアプローチを比較してみましょう。looping-array approach
対b。sorting-indexing-array approach
.
<?php
$period = new DatePeriod(
new DateTime('2009-10-01 00:00:00'),
new DateInterval('P3D'),
new DateTime('2019-10-01 00:00:00')
);
foreach($period as $date){
$dates[] = $date->format('Y-m-d');
};
$today = '2019-08-18 13:00:15';
function custom_sort($array){
sort($array);
return $array;
}
function nearest_date_key($array, $today){
//push today to the array, sort the array,
//find the nearest day value of the sorted array and return key
array_push($array, $today);
$sorted_dates = custom_sort($array);
$find_today_key = array_search($today, $sorted_dates);
$nearest_date = array_slice($sorted_dates, $find_today_key + 1, 1);
return array_search($nearest_date[0], $array);
}
function find_closest($array, $today)
{
//$count = 0;
foreach($array as $day)
{
//$interval[$count] = abs(strtotime($date) - strtotime($day));
$interval[] = abs(strtotime($today) - strtotime($day));
//$count++;
}
asort($interval);
$closest = key($interval);
return $closest;
}
$start = microtime(true);
$result_a = nearest_date_key($dates, $today);
$time_elapsed_secs_a = microtime(true) - $start;
$start = microtime(true);
$result_b = find_closest($dates, $today);
$time_elapsed_secs_b = microtime(true) - $start;
?>
結果を印刷すると ( http://phptester.net/ )
result time_elapsed
loop approach (a) 1203 0.00630
sorting index approach (b) 1203 0.00062
これは、経過時間の大幅な増加です。待ち時間を10で割りました