2013-07-28 254 views
0

我有3个数组,从3个不同的搜索引擎返回一个url,title,snippet和score,数组中的元素的分数从100开始,第二个99,等等试图将所有3合并为一个阵列。如果网址与不同阵列匹配,我想将分数添加到一起,然后删除重复的网址。如果网址之间没有匹配,那么我只想把这个元素放到组合数组中。 最终的合并列表应包含其分数,标题和摘要的所有不同的URL上,这里是我的阵列结构从多个阵列创建一个排名列表

googleArray

$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

​​3210

任何帮助将是伟大的,在此先感谢

+0

$我在bingArray中没用。另外为什么你在不同的数组中有不同的名称:link,url,Url?这将使问题解决复杂化。 – user4035

+0

链接,网址和Url是不同搜索引擎放入数组的名称,但是我可以更改数组中的赋值,但那是我的问题中最少的。 – user2622398

+0

是的,如果所有数组都具有相同用于统一解决方案的类似数据的关键名称 – user4035

回答

0

该解决方案取决于几件事情的工作。首先,urlscore键必须是相同的,即全部小写,并且都不是“链接”。其次,这些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; 
} 

如果你不想保持网址为重点,加入这一行:如果你想按分数排序的数组

$combined = array_values($combined); 

,您可以使用usort

usort($combined, function ($a, $b){ 
    return $b['score'] - $a['score']; 
}); 
print_r($combined); 
+0

我刚更新了一些用于对数组进行排序的代码。 –