Php 如何按序列化数组的每个项进行分组和计数?
我在数据库的一个字段中以序列化数组存储一个项目列表(我使用的是PHP/MySQL)。 每个用户在自己的表中都有这个序列化数组。我需要计算有多少用户拥有一个序列化数组项 例如: 序列化数组可能包含(0,1,2,3,4,5,6,7,8) 用户a强> a:2:{i:0;s:1:6;i:1;s:1:7;} 用户b强> a:1:{i:0;s:1:6;} 用户c强> a:3:{i:0;s:1:6;i:1;s:1:7;i:2;s:1:2;} 我需要这个结果强> 计数(“0”)=0 计数(“1”)=0 计数(“2”)=1 计数(“3”)=0 计数(“4”)=0 计数(“5”)=0 计数(“6”)=3 计数(“7”)=2 计数(“8”)=0 希望这是有道理的。 任何想法都将不胜感激。 谢谢您可以使用两个循环Php 如何按序列化数组的每个项进行分组和计数?,php,mysql,serialization,group-by,Php,Mysql,Serialization,Group By,我在数据库的一个字段中以序列化数组存储一个项目列表(我使用的是PHP/MySQL)。 每个用户在自己的表中都有这个序列化数组。我需要计算有多少用户拥有一个序列化数组项 例如: 序列化数组可能包含(0,1,2,3,4,5,6,7,8) 用户a a:2:{i:0;s:1:6;i:1;s:1:7;} 用户b a:1:{i:0;s:1:6;} 用户c a:3:{i:0;s:1:6;i:1;s:1:7;i:2;s:1:2;} 我需要这个结果 计数(“0”)=0 计数(“1”)=0 计数(“2”)=1 计数
$arrCount = array();
foreach($arrUsers $user_key=>$count_data){
foreach($count_data => $val){
if(isset($arrCount[$val]))
{
$arrCount[$val]++;
}else{
$arrCount[$val] = 1;
}
}}
您可以创建一个简单的函数,遍历每个用户数组。请注意,我在计数之前取消了数组序列化。该代码将给出理想的结果
<?php
function countElement($userArray, $value) {
$cnt = 0;
if(!empty($userArray)) {
foreach($userArray as $user) {
$unserializeArr = unserialize($user);
$tmp = array_count_values($unserializeArr);
if(isset($tmp[$value])) $cnt += $tmp[$value];
}
}
return $cnt;
}
$userArr = array();
$userArr[] = 'a:2:{i:0;s:1:"6";i:1;s:1:"7";}';
$userArr[] = 'a:1:{i:0;s:1:"6";}';
$userArr[] = 'a:3:{i:0;s:1:"6";i:1;s:1:"7";i:2;s:1:"2";}';
for($i = 0; $i <= 8; $i++) {
echo 'Count('.$i.') = '.countElement($userArr, $i).'<br>';
}
?>
MySQL无法使用该格式。您必须检索条目并自己进行计数/分组。顺便说一句,CSV是一种格式的数据库至少工作;否则,将条目放入一个单独的与用户id相关的表中。如果将这些数字存储在单独的表中,会更容易<代码>用户id号。