我将数据列表存储在数据库中的字段中的序列化数组中(我使用的是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
希望这是有道理的。 任何想法将不胜感激。 感谢
答案 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>';
}
?>