2012-02-15 13 views
2

3つの配列の中に配列があります。配列のキーが一致して順序付けされている場合

私はそれをマージする必要がありますが、3つの配列のいずれかの値が他の2つの配列のいずれかの値と一致する場合、キーは合計でなければなりません。

I.E.[bing] [10]は[google] [10](実際には私の間違いではない)、[yahoo] [10] とマッチするので、新しい結合された配列の最初の位置に[url] [30]等々。

どうすればいいですか?

マイ配列:http://pastebin.com/tSfrCcMJ

$array = array (
    'bing' => array (
     10 => 'http://stackoverflow.com/', 
     9 => 'http://www.stackoverflow.es/', 
     8 => 'http://stackoverflow.com/questions', 
     7 => 'http://www.stackoverflow.es/empresa/avisolegal', 
     6 => 'http://stackoverflow.net/', 
     5 => 'http://chat.stackoverflow.com/', 
     4 => 'http://blog.stackoverflow.com/', 
     3 => 'http://chat.stackoverflow.com/?tab=all&sort=active&page=16', 
     2 => 'http://meta.stackoverflow.com/', 
     1 => 'http://careers.stackoverflow.com/ewernli' 
    ), 
    'google' => array (
     10 => 'http://stackoverflow.com/&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CBYQFjAA&usg=AFQjCNFOHjfhg0MrXOGxhxoLkWY6BP7Erw', 
     9 => 'http://stackoverflow.com/users/login', 
     8 => 'http://en.wikipedia.org/wiki/Stack_overflow&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CC0QFjAH&usg=AFQjCNFaLvYDIANOTluG7kTQZppgPK1OuQ', 
     7 => 'http://blog.stackexchange.com/&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CDAQFjAI&usg=AFQjCNFM47UgedUUcCIIENkkEpGT1F5-VQ', 
     6 => 'http://itc.conversationsnetwork.org/series/stackoverflow.html&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CDMQFjAJ&usg=AFQjCNEhtBxP6KPK9A2IIHzjqGETn5kVgA', 
     5 => 'http://stackoverflow.org/&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CDYQFjAK&usg=AFQjCNFsYAEUQYofh1C2k0IfppDSwwxAUA', 
     4 => 'http://stackoverflow.net/&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CDgQFjAL&usg=AFQjCNH55YZyZeh8q75--kYkyCg8nRuf4g', 
     3 => 'http://www.crunchbase.com/company/stack-exchange&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CDsQFjAM&usg=AFQjCNETf6XyPdfFqJC5-6F5NFxGjDY2wA', 
     2 => 'http://embeddedgurus.com/stack-overflow/&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CEAQFjAN&usg=AFQjCNE-vRAAhmbu_OzwpI6EoI-9va12LA', 
     1 => 'http://www.haskell.org/haskellwiki/Stack_overflow&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CEMQFjAO&usg=AFQjCNEhsp34I-FC-dW0fG0-ZogG7T-qXg', 
     0 => 'http://highscalability.com/blog/2011/3/3/stack-overflow-architecture-update-now-at-95-million-page-vi.html&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CEYQFjAP&usg=AFQjCNEf7K09RvPYSDxWKKhDdCpDj1hs1w' 
    ), 
    'yahoo' => array (
     10 => 'http://stackoverflow.com/', 
     9 => 'http://en.wikipedia.org/wiki/Stack_overflow', 
     8 => 'http://stackoverflow.com/about', 
     7 => 'http://en.wikipedia.org/wiki/Stackoverflow', 
     6 => 'http://blog.stackoverflow.com/', 
     5 => 'http://facebook.stackoverflow.com/', 
     4 => 'http://stackoverflow.com/questions', 
     3 => 'http://stackoverflow.net/', 
     2 => 'http://stackoverflow.com/faq', 
     1 => 'http://stackoverflow.com/questions/ask' 
    ) 
); 

望ましい結果(私は、キー和 'http://stackoverflow.com/' 試合をしました):

krsort($array); 
$result = array (30 => 'http://stackoverflow.com/', 9 => 'http://en.wikipedia.org/wiki/Stack_overflow', 8 => 'http://stackoverflow.com/about', 7 => 'http://en.wikipedia.org/wiki/Stackoverflow', 6 => 'http://blog.stackoverflow.com/', 5 => 'http://facebook.stackoverflow.com/', 4 => 'http://stackoverflow.com/questions', 3 => 'http://stackoverflow.net/', 2 => 'http://stackoverflow.com/faq', 1 => 'http://stackoverflow.com/questions/ask', 0 => 'http://highscalability.com/blog/2011/3/3/stack-overflow-architecture-update-now-at-95-million-page-vi.html&sa=U&ei=oMg7T_rpJ4rz-gazm_SsBw&ved=0CEYQFjAP&usg=AFQjCNEf7K09RvPYSDxWKKhDdCpDj1hs1w',); 
+1

を与えるあなたは 'var_export'の代わりに、' var_dump'とその配列をしてください与えることができますか?私はそれを変換するにはあまりにも怠惰です。 – Gordon

+0

それで、その配列を与えた場合、結果はどうなるでしょうか?あなたは実際にキーが何であるか気にしますか(もしそうならば)、あるいはすべてのユニークな値がほしいだけですか? – DaveRandom

+1

@Gordon http://codepad.viper-7.com/GK17Gk - 質問を編集します。 – DaveRandom

答えて

1

あなたはスコアを持つことができません2つのエントリのスコアが同じ場合に値を上書きする危険があるため、あなたにできることは次のとおりです。

$urls = array(); 
array_walk_recursive($array, function ($url, $score) use (&$urls) { 
    $key = strtok($url, '&'); 
    $urls[$key] = isset($urls[$key]) ? $urls[$key] + $score : $score; 
}); 
arsort($urls); 
print_r($urls); 

Array 
(
    [http://stackoverflow.com/] => 30 
    [http://en.wikipedia.org/wiki/Stack_overflow] => 17 
    [http://stackoverflow.net/] => 13 
    [http://stackoverflow.com/questions] => 12 
    [http://blog.stackoverflow.com/] => 10 
    [http://stackoverflow.com/users/login] => 9 
    … 
関連する問題