Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从多个数组创建排名列表_Php_Arrays - Fatal编程技术网

Php 从多个数组创建排名列表

Php 从多个数组创建排名列表,php,arrays,Php,Arrays,我有3个数组,它们从3个不同的搜索引擎返回url、标题、代码片段和分数,数组中元素的分数从100开始,第二个是99,以此类推,我正在尝试将所有3个元素组合成一个数组。如果url与不同数组匹配,我想将分数相加,然后删除重复的url。如果URL之间不匹配,那么我只想将此元素放入组合数组中。 最后的组合列表应该包含所有不同的URL及其分数、标题和代码段,以下是我的数组结构 愚蠢的 $x=0; $score=100; foreach ($js->items as $item) {

我有3个数组,它们从3个不同的搜索引擎返回url、标题、代码片段和分数,数组中元素的分数从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++;
    } 
白头翁

$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是不同的搜索引擎放入数组中的名称,但是是的,我可以更改数组中的赋值,但这是我的问题中最小的一个,如果所有数组对于相似的数据都有相同的键名,那么将更好地统一解决方案