0

我有 3 个数组,它们从 3 个不同的搜索引擎返回一个 url、title、snippet 和分数,数组中元素的分数从 100 开始,第二个 99 等等,我试图将所有 3 个组合成一个数组. 如果 url 从不同的数组中匹配,我想将分数相加,然后删除重复的 url。如果 url 之间不匹配,那么我只想将此元素放入组合数组中。最终的组合列表应包含所有不同的 url 及其分数、标题和片段,这是我的数组结构

谷歌数组

$x=0;
$score=100;
foreach ($js->items as $item)
    {   
        $googleArray[$x]['link'] = ($item->{'link'});
        $googleArray[$x]['title'] = ($item->{'title'});
        $googleArray[$x]['snippet'] = ($item->{'snippet'});
        $googleArray[$x]['score'] = $score--;
        $x++;
    } 

blekkoArray

$score = 100; 
foreach ($js->RESULT as $item)
{           
$blekkoArray[$i]['url'] = ($item->{'url'});         
$blekkoArray[$i]['title'] = ($item->{'url_title'});
$blekkoArray[$i]['snippet'] = ($item->{'snippet'});
$blekkoArray[$i]['score'] = $score--;      // assign the $score value here
$i++;

}

bingArray

foreach($jsonObj->d->results as $value)
    {   $i = 0;

        $bingArray[]['Url'] = ($value->{'Url'});            
        $bingArray[]['Title'] = ($value->{'Title'});
        $bingArray[]['Description'] = ($value->{'Description'});
        $bingArray[]['score'] = $score--;
        $i++;
    }

任何帮助都会很棒,在此先感谢

4

1 回答 1

0

此解决方案取决于几件事。首先,urlscore键必须相同,即全部小写且没有“链接”。其次,必须对 URL 进行规范化,因为它们用作数组的键。如果 URL 有任何差异,它们将在最终数组中出现多次。

$merged = array_merge($googleArray, $blekkoArray);
$merged = array_merge($merged, $bingArray);
$combined = array();
foreach ($merged as $key => $value){
    $score = (isset($combined[$value['url']]['score'])) ? $value['score'] + $combined[$value['url']]['score'] : $value['score'];
    $combined[$value['url']] = $value;
    $combined[$value['url']]['score'] = $score;
}

如果您不想将 URL 作为键,请添加以下行:

$combined = array_values($combined);

如果要按分数对数组进行排序,可以使用usort

usort($combined, function ($a, $b){
    return $b['score'] - $a['score'];
});
print_r($combined);
于 2013-07-28T14:38:59.027 回答