0

array_count_values($arr1)array_count_values($arr2)ifの戻り配列を組み合わせて、同じ値$arr1$arr2持つ要素を持つ効率的な方法はありますか?

私は古典的な「10 億行の検索要求を含むドキュメントから上位 100 の検索要求を生成する」という方法に取り組もうとしています。

私のアプローチは、unix を使用splitしてドキュメントを小さなファイルに分割し、各ファイル内の各検索用語の出現回数を でカウントし、array_count_valuesそれらすべてのファイルを、各検索クエリの人気度の降順で並べ替えられたリストを持つ単一のファイルに縮小することです。 .

編集 たとえば

$arr1 = array('kurt', 'curt', 'kurt', 'dave', 'krist');
$arr2 = array('dave' 'dave', 'krist', 'krist');

array_count_values($arr1) // ('kurt' => 2, 'curt'=>1, 'dave'=>1, 'krist'=>1)
array_count_values($arr2) // ('dave' => 2, 'krist'=>2)

2つを組み合わせて次の配列を形成するにはどうすればよいですか

('kurt' => 2, 'dave'=>3, 'krist'=>3, 'curt'=>1)
4

3 に答える 3

1

これを試して :

$arr1 = array('kurt', 'curt', 'kurt', 'dave', 'krist');
$arr2 = array('dave', 'dave', 'krist', 'krist');

$cnt_arr1  = array_count_values($arr1); // ('kurt' => 2, 'curt'=>1, 'dave'=>1, 'krist'=>1)
$cnt_arr2  = array_count_values($arr2); // ('dave' => 2, 'krist'=>2)

$res_arr   = array_merge_recursive($cnt_arr1,$cnt_arr2);

$res       = array();
foreach($res_arr as $key=>$val){
 if(is_array($val)){
    $res[$key]= array_sum($val);
 }else{
    $res[$key]= $val;
 }

}

echo "<pre>";
print_r($res);
于 2013-02-22T06:40:22.240 に答える
0

これを試して :

$arr = array_merge($arr1,$arr2);
$count = array_count_values($arr);
于 2013-02-22T06:22:59.703 に答える
0

以下のコードを試してください。それが動作します、

$arr1 = array('kurt', 'curt', 'kurt', 'dave', 'krist');
$arr2 = array('dave', 'dave', 'krist', 'krist');

$array1Count = array_count_values($arr1); // ('kurt' => 2, 'curt'=>1, 'dave'=>1, 'krist'=>1)
$array2Count = array_count_values($arr2); // ('dave' => 2, 'krist'=>2)
$resultArray = array();
foreach($array1Count as $key => $value) {
    if(array_key_exists($key, $array2Count)) {
        $resultArray[$key] = $array1Count[$key] + $array2Count[$key];
    }
    else {
        $resultArray[$key] = $array1Count[$key];
    }
    unset($array2Count[$key]);
}
$finalResultArray = array_merge($array2Count, $resultArray);
print_r($finalResultArray);
于 2013-02-22T06:42:05.280 に答える