我有一个包含很多日期的数组,下面是一个例子。
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) }
谢谢
答案 0 :(得分:1)
映射键以获取字符串到第一个 -
并将其与现有值组合:
$result = array_combine(array_map(function($v) {
return strstr($v, '-', true);
},
array_keys($array)), $array);
您可以对函数中的 strtotime
和 date
执行相同操作,但您似乎遇到了问题:
$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;
}
}