如果$ arr1和$ arr2具有相同值的元素,有没有办法组合array_count_values($ arr1)和array_count_values($ arr2)的结果?

时间:2013-02-22 06:18:53

标签: php linux unix

如果array_count_values($arr1)array_count_values($arr2)具有相同值的元素,是否有一种有效的方法来组合$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)

如何将两者结合起来形成以下数组

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

试试这个:

$arr = array_merge($arr1,$arr2);
$count = array_count_values($arr);

答案 2 :(得分: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);