【问题标题】:Extract the year from an array of dates从日期数组中提取年份
【发布时间】:2021-05-24 01:13:11
【问题描述】:

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

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) }

谢谢

【问题讨论】:

  • 你尝试过什么?
  • 这是我的问题,我不知道该尝试什么。这是我网站的新时间表。我想从每个事件中获取年份,然后将年份列表转换为仅生成该特定年份的项目的链接。一旦我可以将数组缩减到仅包含年份的列表,我就可以做到这一点。

标签: php arrays datetime


【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多