Возврат агрегированного массива из входного многомерного массива

У меня есть два входа, идентификатор и многомерный массив

Например, скажем, 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>";
}

Посоветуйте пожалуйста как двигаться дальше отсюда.

0

Решение

После десериализации значения проверьте, установлен ли элемент с ключом 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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector