0

dbからいくつかのデータをフェッチしてから、それらを配列にプッシュしています。いくつかの文字列の数を見つけて、効率的な方法で結果(数)を出力する必要があります。

Array
(
    [0] => q1-1,q2-2,q3-2,q4-1,q5-2,q6-3,q7-1,q8-4,
    [1] => q1-1,q2-2,q3-1,q4-3,q5-3,q6-3,q7-2,q8-1,
    [2] => q1-1,q2-1,q3-1,q4-1,q5-1,q6-2,q7-2,q8-2,
    [3] => q1-3,q2-1,q3-1,q4-1,q5-2,q6-3,q7-1,q8-1,
    [4] => q1-2,q2-2,q3-3,q4-1,q5-3,q6-3,q7-1,q8-1,
    [5] => q1-1,q2-2,q3-3,q4-1,q5-2,q6-3,q7-1,q8-1,
    [6] => q1-3,q2-1,q3-1,q4-3,q5-2,q6-3,q7-2,q8-4,
    [7] => q1-2,q2-2,q3-3,q4-1,q5-2,q6-5,q7-1,q8-1,
    [8] => q1-1,q2-1,q3-2,q4-3,q5-3,q6-5,q7-1,q8-1,
    [9] => q1-2,q2-1,q3-1,q4-1,q5-3,q6-3,q7-1,q8-1,
    [10] => q1-3,q2-2,q3-3,q4-3,q5-4,q6-3,q7-1,q8-1,
    ...
)

サンプルデータは上にあります。

q1-1、q1-2 ... q8-4の出現回数を知り、読み取り可能なバージョンを出力する必要があります。元。23:q1-1、412:q1-2などです。

検索する必要のある各文字列の配列を作成し、配列を反復処理しました。結果ごとに、その文字列のresultVariableをインクリメントしますが、それが最善の方法かどうかはわかりません。

提案?

4

2 に答える 2

2

非常に単純で、配列をループし、サブ配列を作成し、カウンター配列を作成します。

$counts = array () ;
foreach ( $your_array as $row ) {
    $sub = explode(',', $row);
    foreach ( $sub as $subval ) {
        if ( array_key_exists ( $subval, $counts ) ) {
            $counts[$subval] ++ ;
        } else {
            $counts[$subval] = 1 ;
        }
    }
}

ここにあり$countsます:

Array (
    'q1-1' => 23,
    'q1-2' => 9,
    // and so on....
);
于 2012-12-03T16:59:43.457 に答える
0

試す:

$arr = array(...); //your array 
$count = array();       
foreach($arr as $v) {
 $substr = explode(',', $v); 
 foreach($substr as $m) {   
 if(strstr($v, $m) !== FALSE)
  $count[$m]++; 
 }    
}

カウントを印刷し、

foreach($count as $k => $v)
 echo "Count for '$k': ". $v;
于 2012-12-03T17:00:12.613 に答える