如何分组并计算序列化数组的每个项目?

时间:2012-10-31 09:36:43

标签: php mysql serialization group-by

我将数据列表存储在数据库中的字段中的序列化数组中(我使用的是PHP / MySQL)。 每个用户在自己的表中都有这个序列化数组。我需要计算有多少用户拥有序列化数组的一个项目。

例如:

序列化数组可能包含(0,1,2,3,4,5,6,7,8)

用户a; 一:2:{I 0,S:1: “6”; I:1; S:1: “7”;}

用户b; 一个:1:{I 0,S:1: “6”;}

用户c; 一个:3:{I 0,S:1: “6”; I:1; S:1: “7”; I:2; S:1: “2”;}

我需要这个结果;

count(“0”)= 0

count(“1”)= 0

count(“2”)= 1

count(“3”)= 0

count(“4”)= 0

count(“5”)= 0

count(“6”)= 3

count(“7”)= 2

count(“8”)= 0

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

2 个答案:

答案 0 :(得分:0)

您可以使用两个循环。

$arrCount = array();
foreach($arrUsers $user_key=>$count_data){
foreach($count_data => $val){
   if(isset($arrCount[$val]))
   {
       $arrCount[$val]++;
   }else{
       $arrCount[$val] = 1;
   }
}}

答案 1 :(得分:0)

你可以创建一个简单的函数,遍历每一个userarray。请注意,我在计数之前反序列化数组。这段代码将给出理想的结果。

<?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>';
}

?>