0

データベースのフィールド内のシリアル化された配列に項目のリストを保存しています (PHP/MySQL を使用しています)。各ユーザーは、このシリアル化された配列を独自のテーブルに持っています。シリアル化された配列の 1 つのアイテムを持っているユーザーの数を数える必要があります。

例えば:

シリアル化された配列には、(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

すべての単一のユーザー配列をウォークスルーする単純な関数を作成できます。カウントする前に配列のシリアル化を解除していることに注意してください。このコードは望ましい結果をもたらします。

<?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 に答える
0

2 つのループを使用できます。

$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 に答える