0

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

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

4

2 回答 2

0

您可以使用两个循环。

$arrCount = array();
foreach($arrUsers $user_key=>$count_data){
foreach($count_data => $val){
   if(isset($arrCount[$val]))
   {
       $arrCount[$val]++;
   }else{
       $arrCount[$val] = 1;
   }
}}
于 2012-10-31T09:45:15.627 回答
0

您可以创建一个简单的函数,遍历每个用户数组。请注意,我在计数之前对数组进行了反序列化。此代码将给出理想的结果。

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

?>
于 2012-10-31T14:37:58.773 回答