2012-02-15 2 views
2

У меня есть массив с 3 массивами внутри.Суммировать ключи массивов, если они совпадают и заказать его

Мне нужно объединить его, но если значение любого из трех массивов соответствует значению любого из двух других массивов, ключи должны быть суммированы.

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

Вы не можете иметь счет для ключей, потому что вы рискуете переписать значения, когда две записи имеют одинаковый балл. Что вы можете сделать, это:

$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 
    … 
Смежные вопросы