如何获取数组的切片,其中date是数组的关键?

时间:2011-02-19 21:27:57

标签: php arrays

我有一个数组,其日期(例如“2011-10-31”)作为键和一些与之关联的值。数组已排序。现在,我想通过给出开始日期和结束日期来切片数组?我怎么能在PHP中做到这一点?

1 个答案:

答案 0 :(得分:4)

简单循环:

function getRange($array, $start, $end) {
    $inRange = false;
    $result = array();
    foreach($array as $date => $value) {
        if($date >= $start && !$inRange) {
            $inRange = true;
        }
        if($date > $end) {
            break;
        }
        if($inRange) {
            $result[$date] = $value;
        }
    }
    return $result;
}

如果开始日期和结束日期与数组中的键完全匹配,您还可以使用array_keysarray_searcharray_slice的组合(但可能不会更快):

function getRange($array, $start, $end) {
    $keys = array_keys($array);
    $starti = array_search($start, $keys);
    $endi = array_search($end, $keys);
    return array_slice($array, $starti, $endi-$starti+1);
}

我假设您希望在结果数组中包含开始日期和结束日期。

当然,如果开始和/或结束日期不在数组中,你必须考虑应该发生什么。