Php 如何按序列化数组的每个项进行分组和计数?

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 计数

我在数据库的一个字段中以序列化数组存储一个项目列表(我使用的是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

希望这是有道理的。 任何想法都将不胜感激。 谢谢

您可以使用两个循环

$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号。