首页 > 解决方案 > 从输入多维数组返回聚合数组

问题描述

我有两个输入,一个 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>";
}

请告知如何从这里继续前进。

标签: phparraysaggregate

解决方案


反序列化值后,检查是否设置了键为 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);

推荐阅读