Php 从多个数组创建排名列表
我有3个数组,它们从3个不同的搜索引擎返回url、标题、代码片段和分数,数组中元素的分数从100开始,第二个是99,以此类推,我正在尝试将所有3个元素组合成一个数组。如果url与不同数组匹配,我想将分数相加,然后删除重复的url。如果URL之间不匹配,那么我只想将此元素放入组合数组中。 最后的组合列表应该包含所有不同的URL及其分数、标题和代码段,以下是我的数组结构 愚蠢的Php 从多个数组创建排名列表,php,arrays,Php,Arrays,我有3个数组,它们从3个不同的搜索引擎返回url、标题、代码片段和分数,数组中元素的分数从100开始,第二个是99,以此类推,我正在尝试将所有3个元素组合成一个数组。如果url与不同数组匹配,我想将分数相加,然后删除重复的url。如果URL之间不匹配,那么我只想将此元素放入组合数组中。 最后的组合列表应该包含所有不同的URL及其分数、标题和代码段,以下是我的数组结构 愚蠢的 $x=0; $score=100; foreach ($js->items as $item) {
$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++;
}
白头翁
$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++;
}
任何帮助都会很好,请提前感谢此解决方案取决于两个方面。首先,
url
和score
键需要相同,即所有小写字母都是“link”,没有一个是“link”。其次,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);
$i在bingArray中是无用的。还有,为什么在不同的数组中有不同的名称:link、url、url?这将使问题的解决变得复杂。link、url和url是不同的搜索引擎放入数组中的名称,但是是的,我可以更改数组中的赋值,但这是我的问题中最小的一个,如果所有数组对于相似的数据都有相同的键名,那么将更好地统一解决方案