从日期数组中提取年份

时间:2021-02-21 16:58:17

标签: php arrays datetime

我有一个包含很多日期的数组,下面是一个例子。

array(4) { ["1939-05-19"]=> int(2) ["1939-02-17"]=> int(1) ["1939-04-21"]=> int(1) ["1941-09-18"]=> int(1) }

我想在 PHP 中做的是改变这个数组,这样我所拥有的只是年而不是日或月,这可能吗?所以它看起来像这样:

array(2) { ["1939"]=> int(3) ["1941"]=> int(1) }

谢谢

1 个答案:

答案 0 :(得分:1)

映射键以获取字符串到第一个 - 并将其与现有值组合:

$result = array_combine(array_map(function($v) {
                                      return strstr($v, '-', true);
                                  },
                                  array_keys($array)), $array);

您可以对函数中的 strtotimedate 执行相同操作,但您似乎遇到了问题:

$result = array_combine(array_map(function($v) {
                                      return date('Y', strtotime($v));
                                  },
                                  array_keys($array)), $array);

但是现在我看到您正在尝试对这些年的值求和,因此请执行相同操作并将其用作键并添加每个新值:

foreach($array as $key => $value) {
    $year = strstr($key, '-', true);
    if(isset($result[$year])) {
        $result[$year] += $value;
    } else {
        $result[$year] = $value;
    }
}

或者这样做但使用strtotime

foreach($array as $key => $value) {
    $year = date('Y', strtotime($key));
    if(isset($result[$year])) {
        $result[$year] += $value;
    } else {
        $result[$year] = $value;
    }
}