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
相关产品推荐
相关产品推荐

