PHPで配列の中で最も近い日付を取得する方法


方法1: ループを使用して最も近い日付を見つける方法

function findClosestDate($targetDate, $dateArray) {
    $closestDate = null;
    $closestDiff = null;

    foreach ($dateArray as $date) {
        $diff = abs(strtotime($targetDate) - strtotime($date));

        if ($closestDiff === null || $diff < $closestDiff) {
            $closestDate = $date;
            $closestDiff = $diff;
        }
    }

    return $closestDate;
}
$targetDate = '2024-02-17';
$dateArray = ['2024-02-15', '2024-02-16', '2024-02-18'];
$closestDate = findClosestDate($targetDate, $dateArray);
echo "最も近い日付: " . $closestDate;

方法2: array_reduceを使用して最も近い日付を見つける方法

function findClosestDate($targetDate, $dateArray) {
    return array_reduce($dateArray, function ($closestDate, $date) use ($targetDate) {
        $diff = abs(strtotime($targetDate) - strtotime($date));

        if ($closestDate === null || $diff < abs(strtotime($targetDate) - strtotime($closestDate))) {
            return $date;
        }

        return $closestDate;
    });
}
$targetDate = '2024-02-17';
$dateArray = ['2024-02-15', '2024-02-16', '2024-02-18'];
$closestDate = findClosestDate($targetDate, $dateArray);
echo "最も近い日付: " . $closestDate;

方法3: usortを使用して最も近い日付を見つける方法

function findClosestDate($targetDate, $dateArray) {
    usort($dateArray, function ($a, $b) use ($targetDate) {
        $diffA = abs(strtotime($targetDate) - strtotime($a));
        $diffB = abs(strtotime($targetDate) - strtotime($b));

        return $diffA - $diffB;
    });

    return $dateArray[0];
}
$targetDate = '2024-02-17';
$dateArray = ['2024-02-15', '2024-02-16', '2024-02-18'];
$closestDate = findClosestDate($targetDate, $dateArray);
echo "最も近い日付: " . $closestDate;

これらの方法は、与えられた日付の配列から最も近い日付を見つけるための一般的なアプローチです。どの方法を選択するかは、特定の要件やパフォーマンスの要件によって異なる場合があります。