是否有一种方法可以根据特定条件组合最多3个多维数组';将OOP PHP对象合并到一个数组中?

是否有一种方法可以根据特定条件组合最多3个多维数组';将OOP PHP对象合并到一个数组中?,php,sorting,oop,object,multidimensional-array,Php,Sorting,Oop,Object,Multidimensional Array,编辑: 更短更通用的版本: 我在寻找一个PHP算法,将最多3个多维对象数组组合成一个多维对象数组 但是我需要一些特定的东西,所以一个简单的数组合并是不够的 如果存在重复,则必须调整排名,因此此结果 项需要在数组中向上移动 对于其他结果:它 需要将相同高度的结果编织在一起,而不是 而不是像数组合并一样将结果粘贴在彼此下面 可以 我还需要考虑到以后 应用程序可能会扩展为结果评级,以便排名也可能是基于评级的主观调整 -- -- -- 结果应该是: combinedArray( Object C

编辑: 更短更通用的版本:

我在寻找一个PHP算法,将最多3个多维对象数组组合成一个多维对象数组

但是我需要一些特定的东西,所以一个简单的数组合并是不够的

  • 如果存在重复,则必须调整排名,因此此结果 项需要在数组中向上移动
  • 对于其他结果:它 需要将相同高度的结果编织在一起,而不是 而不是像数组合并一样将结果粘贴在彼此下面 可以
  • 我还需要考虑到以后 应用程序可能会扩展为结果评级,以便排名也可能是基于评级的主观调整

--

--

-- 结果应该是:

combinedArray(
Object C // is found by all tree
”Title” => ”C”
”Rank” => 2

Object A // is found in 2
”Title” => ”A”
”Rank” => 0

Object Z // is found in 2
”Title” => ”Z”
”Rank” => 0

Object X
”Title” => X
”Rank” => 0

Object B
”Title” => ”B”
”Rank” => 1

Object S
”Title” =>” S”
”Rank” => 2
)
__

首选的回答语言是PHP


提前感谢您的帮助,并花时间阅读所有这些

这就是我要解决的问题,它只是一个循环,最后是一个usort,根据newRank设置顺序。我还假设一个重复的url。输出链接如下:


我想,这个问题的问题是,对于大多数人来说,有很多细节可以让他们涉过。你可能会因为这个而很难得到答案。谢谢你,我是一个全新的发帖人。。。也许你能给我一些建议,让我如何缩短这个问题,好吗?没有所有的信息我很震惊,我问的可能不够清楚……@NigelRen我试着把问题缩短,更一般,这样更好吗?非常感谢@cOle2!我需要摆弄一下它,但还是让它工作了!我需要在foreach中添加额外的缩进和缩进,因为它试图在更高的层次上找到urlink。因为我在使用类,我需要将usort请求扩展到类,这对我来说是新的东西,所以我花了更长的时间来找到。。。usort($this->results,array($this,“sortByRank”));非常感谢。
Array 2 (
Object X
”Title” => X
”Rank” => 0

Object Z
”Title” => ”Z”
”Rank” => 1

Object C
”Title” =>” C”
”Rank” => 2
) 
Array3(
Object Z
”Title” => ”Z”
”Rank” => 0

Object A
”Title” => ”A”
”Rank” => 1

Object C
”Title” => ”C”
”Rank” => 2
)
combinedArray(
Object C // is found by all tree
”Title” => ”C”
”Rank” => 2

Object A // is found in 2
”Title” => ”A”
”Rank” => 0

Object Z // is found in 2
”Title” => ”Z”
”Rank” => 0

Object X
”Title” => X
”Rank” => 0

Object B
”Title” => ”B”
”Rank” => 1

Object S
”Title” =>” S”
”Rank” => 2
)
<?php

//google
$res1 = array();
$res1[0] = array('id'=>null, 'title'=>'Owl - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/Owl', 'currentRank'=>0, 'newRank'=>null);
$res1[1] = array('id'=>null, 'title'=>'Owl (Marvel Comics) - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/Owl_(Marvel_Comics)', 'currentRank'=>1, 'newRank'=>null);
$res1[2] = array('id'=>null, 'title'=>'Owl Pharaoh - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/Owl_Pharaoh', 'currentRank'=>2, 'newRank'=>null);
$res1[3] = array('id'=>null, 'title'=>'Owl City - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/Owl_City', 'currentRank'=>3, 'newRank'=>null);
$res1[4] = array('id'=>null, 'title'=>'Owl (Nguyen Hung Cuong) | Happy Folding', 'urlLink'=>'https://www.happyfolding.com/gallery-nguyen-owl', 'currentRank'=>1, 'newRank'=>null);

//bing
$res2 = array();
$res2[0] = array('id'=>null, 'title'=>'OWL/TV - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/OWL/TV', 'currentRank'=>0, 'newRank'=>null);
$res2[1] = array('id'=>null, 'title'=>'Owl (Nguyen Hung Cuong) | Happy Folding', 'urlLink'=>'https://www.happyfolding.com/gallery-nguyen-owl', 'currentRank'=>1, 'newRank'=>null);
$res2[2] = array('id'=>null, 'title'=>'Owl Pharaoh - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/Owl_Pharaoh', 'currentRank'=>2, 'newRank'=>null);
$res2[3] = array('id'=>null, 'title'=>'Owl "Nightwatch" (Kay Kraschewski a.k.a. "Akugami ...', 'urlLink'=>'https://www.happyfolding.com/instructions-kraschewski-nightwatch', 'currentRank'=>3, 'newRank'=>null);
$res2[4] = array('id'=>null, 'title'=>'Owl - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/Owl', 'currentRank'=>0, 'newRank'=>null);

//duckduckgo
$res3 = array();
$res3[0] = array('id'=>null, 'title'=>'OWL // Purdue Writing Lab', 'urlLink'=>'https://owl.purdue.edu', 'currentRank'=>0, 'newRank'=>null);
$res3[1] = array('id'=>null, 'title'=>'Owl - Wikipedia', 'urlLink'=>'https://en.wikipedia.org/wiki/Owl', 'currentRank'=>1, 'newRank'=>null);
$res3[2] = array('id'=>null, 'title'=>'Owl | bird | Britannica.com', 'urlLink'=>'https://www.britannica.com/animal/owl', 'currentRank'=>2, 'newRank'=>null);
$res3[3] = array('id'=>null, 'title'=>'The Owl Pages - Information about Owls', 'urlLink'=>'https://www.owlpages.com/owls/', 'currentRank'=>3, 'newRank'=>null);


$results = mergeResults($res1, $res2, $res3);

echo '<pre>', print_r($results, true), '</pre>';


function mergeResults() {
    $results = array(); //array for our final resulsts
    $numargs = func_num_args();
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        $resultSet = $arg_list[$i];
        foreach($resultSet as $rs) {
            //is dupe, decrement rank
            if (isset($results[$rs['urlLink']])) {
                $currentRank = $results[$rs['urlLink']]['newRank'];
                $newRank = $currentRank - 1;
                $results[$rs['urlLink']]['newRank'] = $newRank;
            } else {
                $rs['newRank']  = $rs['currentRank'];
                $results[$rs['urlLink']] = $rs; 
            }
        }
    }

    usort($results, "sortByRank");

    return $results;
}

function sortByRank($a, $b) {
    if($a["newRank"] == $b["newRank"]) {
        return 0;
    }
    return ($a["newRank"] < $b["newRank"]) ? -1 : 1;
}