Php 如果$arr1和$arr2具有相同值的元素,是否有方法组合数组计数值($arr1)和数组计数值($arr2)的结果?

Php 如果$arr1和$arr2具有相同值的元素,是否有方法组合数组计数值($arr1)和数组计数值($arr2)的结果?,php,linux,unix,Php,Linux,Unix,如果$arr1和$arr2具有相同值的元素,是否有一种有效的方法来组合数组计数值($arr1)和数组计数值($arr2)的返回数组 我正在尝试完成经典的“从包含10亿行搜索请求的文档中生成前100个搜索请求” 我的方法是使用unixsplit将文档分割成更小的文件,使用array\u count\u value计算每个文件中每个搜索项的出现次数,然后将所有这些文件缩减为一个文件,该文件具有按每个搜索查询的流行程度递减排序的列表 编辑 比如说 $arr1 = array('kurt', 'curt

如果
$arr1
$arr2
具有相同值的元素,是否有一种有效的方法来组合
数组计数值($arr1)
数组计数值($arr2)
的返回数组

我正在尝试完成经典的“从包含10亿行搜索请求的文档中生成前100个搜索请求”

我的方法是使用unix
split
将文档分割成更小的文件,使用
array\u count\u value
计算每个文件中每个搜索项的出现次数,然后将所有这些文件缩减为一个文件,该文件具有按每个搜索查询的流行程度递减排序的列表

编辑 比如说

$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)
试试这个:

$arr = array_merge($arr1,$arr2);
$count = array_count_values($arr);
$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);
试试这个:

$arr = array_merge($arr1,$arr2);
$count = array_count_values($arr);
$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);
$arr1=array('kurt','curt','kurt','dave','krist');
$arr2=数组('dave','dave','krist','krist');
$cnt_arr1=数组_计数_值($arr1);//('kurt'=>2,'curt'=>1,'dave'=>1,'krist'=>1)
$cnt_arr2=数组_计数_值($arr2);//('dave'=>2,'krist'=>2)
$res\u arr=array\u merge\u recursive($cnt\u arr1,$cnt\u arr2);
$res=array();
foreach($res_arr as$key=>$val){
if(is_数组($val)){
$res[$key]=数组和($val);
}否则{
$res[$key]=$val;
}
}
回声“;
印刷品(港币);;

请尝试以下代码。它会起作用的


请给出$arr1和$arr2的值以及所需的o/p数组,好吗?是的,请给我2分钟的时间写一些东西,你最多只取两个???dave=2,应该是3文档。。它是什么?这个例子适用于一个小数据集,但是如果我有一个包含10亿个搜索请求的文档呢?要求在工作节点上执行映射步骤,在主节点上执行缩减步骤。假设
$arr1
$arr1
的大小之和大于单个工作节点上的RAM数量,
$arr1
$arr2
的大小在单独计算时小于RAM数量,但是
数组计数值($arr1)
数组计数值的返回值之和($arr2)
小于单个辅助进程上的内存量node@user784637你试过这个吗?