php - 从输入多维数组返回聚合数组
问题描述
我有两个输入,一个 ID 和多维数组
例如,假设 ID = 5,数组如下所示:
Array
(
[0] => stdClass Object
(
[year] => 2017
[value] => a:9:{i:5;b:1;i:38;b:1;i:40;b:1;i:42;b:1;i:44;b:1;i:29;b:1;i:46;b:1;i:27;b:1;i:48;b:1;}
)
[1] => stdClass Object
(
[year] => 2018
[value] => a:9:{i:31;b:1;i:5;b:1;i:25;b:1;i:16;b:1;i:27;b:1;i:29;b:1;i:12;b:1;i:14;b:1;i:34;b:1;}
)
[2] => stdClass Object
(
[year] => 2018
[value] => a:3:{i:12;b:1;i:14;b:1;i:16;b:1;}
)
)
我需要反序列化值并每年汇总数据。例如 ID = 5,输出应如下所示:
Array
(
[2017] => 1
[2018] => 1
)
目前我已经对值部分进行反序列化:
foreach($results as $object=>$result){
echo $result->year;
echo "<br>";
echo join(',', array_keys(unserialize($result->value)));
echo "<br>";
}
请告知如何从这里继续前进。
解决方案
反序列化值后,检查是否设置了键为 ID 的元素。如果是,则为该年增加一个计数器。
$id = 5;
$output = array();
foreach ($results as $result) {
$value = unserialize($result->value);
if (!empty($value[$id])) {
if (isset($output[$result->year])) {
$output[$result->year]++;
} else {
$output[$result->year] = 1;
}
}
}
print_r($output);
推荐阅读
- jsf - ui中的selectBooleanCheckBox:repeat不调用监听器
- javascript - jQuery可拖动,即使我平移或缩放图像,如何将可拖动对象移动到正确位置
- android - 使用 smack 在消息应用程序中实现接收器状态(读取或输入) - Android
- ios - 取消控制器动画转换时不正确的preferredStatusBarStyle
- node.js - UnhandledPromiseRejectionWarning:TypeError:_base64Stream2.default.encode 不是函数
- sql - 在用户选择的特定表上运行一个 MS Access SQL 脚本
- html - 如何使高度相对于宽度
- php - 如何在 php preg_replace 中用双引号括起数字?
- r - 根据R中的序列条件按总和聚合
- apache-spark - 如何配置 spark thrift 用户和密码