You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现:从数组中获取指定日期的最接近元素(含同日期全取)

PHP 匹配指定日期或获取最接近日期的数组元素

需求:给定PHP数组$array(每个元素包含date字段,格式为Y-m-d)和搜索日期$search_date,需实现:

  • 若数组中存在与$search_date相同的日期,返回所有该日期对应的数组元素
  • 若不存在相同日期,返回与$search_date最接近的日期对应的所有数组元素

解决方案代码

function getClosestDateElements($array, $search_date) {
    // 将搜索日期转换为时间戳,方便计算差值
    $searchTimestamp = strtotime($search_date);
    if ($searchTimestamp === false) {
        return []; // 处理无效日期格式的情况
    }

    // 按date字段对数组元素分组
    $groupedByDate = [];
    foreach ($array as $item) {
        if (!isset($item['date']) || strtotime($item['date']) === false) {
            continue; // 跳过无效日期的元素
        }
        $date = $item['date'];
        if (!isset($groupedByDate[$date])) {
            $groupedByDate[$date] = [];
        }
        $groupedByDate[$date][] = $item;
    }

    // 先检查是否存在完全匹配的日期
    if (isset($groupedByDate[$search_date])) {
        return $groupedByDate[$search_date];
    }

    // 计算每个日期与搜索日期的时间差,找到最接近的日期
    $closestDate = null;
    $minDiff = PHP_INT_MAX;
    foreach ($groupedByDate as $date => $items) {
        $dateTimestamp = strtotime($date);
        $diff = abs($dateTimestamp - $searchTimestamp);
        if ($diff < $minDiff) {
            $minDiff = $diff;
            $closestDate = $date;
        }
    }

    // 返回最接近日期对应的元素(如果分组不为空)
    return $closestDate ? $groupedByDate[$closestDate] : [];
}

示例测试

示例1

$search_date = '2022-12-08';
$array = [
    ["price"=>"200","date"=>"2022-12-12"],
    ["price"=>"50","date"=>"2022-12-10"],
    ["price"=>"100","date"=>"2022-12-10"]
];
print_r(getClosestDateElements($array, $search_date));
// 输出:
// Array
// (
//     [0] => Array
//         (
//             [price] => 50
//             [date] => 2022-12-10
//         )
//     [1] => Array
//         (
//             [price] => 100
//             [date] => 2022-12-10
//         )
// )

示例2

$search_date = '2022-12-08';
$array = [
    ["price"=>"200","date"=>"2022-12-08"],
    ["price"=>"50","date"=>"2022-12-09"],
    ["price"=>"100","date"=>"2022-12-11"]
];
print_r(getClosestDateElements($array, $search_date));
// 输出:
// Array
// (
//     [0] => Array
//         (
//             [price] => 200
//             [date] => 2022-12-08
//         )
// )

示例3

$search_date = '2022-12-08';
$array = [
    ["price"=>"200","date"=>"2022-12-10"],
    ["price"=>"100","date"=>"2022-12-10"],
    ["price"=>"50","date"=>"2022-12-11"]
];
print_r(getClosestDateElements($array, $search_date));
// 输出:
// Array
// (
//     [0] => Array
//         (
//             [price] => 200
//             [date] => 2022-12-10
//         )
//     [1] => Array
//         (
//             [price] => 100
//             [date] => 2022-12-10
//         )
// )

示例4

$search_date = '2022-12-08';
$array = [
    ["price"=>"200","date"=>"2022-12-08"],
    ["price"=>"100","date"=>"2022-12-08"],
    ["price"=>"50","date"=>"2022-12-08"]
];
print_r(getClosestDateElements($array, $search_date));
// 输出:
// Array
// (
//     [0] => Array
//         (
//             [price] => 200
//             [date] => 2022-12-08
//         )
//     [1] => Array
//         (
//             [price] => 100
//             [date] => 2022-12-08
//         )
//     [2] => Array
//         (
//             [price] => 50
//             [date] => 2022-12-08
//         )
// )

内容的提问来源于stack exchange,提问作者Catalin Iamandei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:45:35