Как сгруппировать и подсчитать каждый элемент сериализованного массива?
Нужный мне плагин для Wordpress хранит список элементов в сериализованном массиве внутри поля в базе MySQL. Каждый пользователь имеет этот сериализованный массив в своей собственной таблице. Мне нужно подсчитать, сколько пользователей имеет один элемент сериализованного массива.
Например:
User_id | Value
123 | a:4:{i:0;s:3:”615“;i:1;s:3:”619“;i:2;s:3:”918“;i:3;s:3:”570“;}
12 | a:4:{i:0;s:3:”23“;i:1;s:3:”615“;i:2;s:3:”918“;}
143 | a:4:{i:0;s:3:”918“;i:1;s:3:”125“;}
Нужно получить и вывести:
918 – имеет 3 юзера
615 – имеет 2 юзера
619 – имеет 1 юзер
570 – имеет 1 юзер
125 – имеет 1 юзер
23 – имеет 1 юзер
Буду очень благодарен за помощь!
Ответы (1 шт):
Задача достаточно тривиальна.
- Забираем данные из базы
- Десериализуем и объединяем в один массив
- Считаем количество значений
<?php
$query = "SELECT * FROM Users;";
$stmt = $pdo->prepare($query);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
//Unserialize and join user arrays
$count_users = array_reduce(
$users,
function($res, $u) {
return array_merge($res, unserialize($u['Value']));
},
[]
);
//Print count values
print_r(array_count_values($count_users));