Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Array_unique i JSON
Forum PHP.pl > Forum > PHP
zimack
Witam, mam takie pytanie, jak zlikwidować podwójne wyniki z wyszukiwania z 2 wyszukiwarek? Znalazłem funkcje array_unique, ale jakos nie wiem jak ją zastosować w moim przypadku. Skrypt pobiera wyniki wyszukiwania z google i yahoo sw JSON, dekoduje i wyswietla na ekranie, ale sa podwójne wpisy, jak uzyc tej funkcji aby je zlikwidować?


Tablica moja:


$phpobj2 = $json->decode($response);
$phpobj3 = $json->decode($response2);
$i = 0;

$search_results = array();


foreach($phpobj2->responseData->results as $r)

{
$search_results['results'][$i]['title'] = $r->title;
$search_results['results'][$i]['url'] = $r->url;

$search_results['results'][$i]['content'] = $r->content;

$i++;
}


foreach($phpobj3->ResultSet->Result as $t)

{
$search_results['results'][$i]['title'] = $t->Title;
$search_results['results'][$i]['url'] = $t->Url;
$search_results['results'][$i]['content'] = $t->Summary;
$i++;

}
ziqzaq
Nie wiem czy to dobry pomysł, ale może coś w tym stylu:
  1. <?php
  2. $search_results = array();
  3. foreach($phpobj2->responseData->results as $r)
  4. {
  5.    $search_results[$r->url]['title'] = $r->title;
  6.    $search_results[$r->url]['content'] = $r->content;
  7.    $i++;
  8. }
  9. foreach($phpobj3->ResultSet->Result as $t)
  10. {
  11.    $search_results[$t->Url]['title'] = $t->Title;
  12.    $search_results[$t->Url]['content'] = $t->Summary;
  13.    $i++;
  14. }
  15. ?>

w ten sposób wykluczysz takie same url w wynikach (może jeszcze jakiś if i isset() żeby nie przypisywać na nowo wartości w tablicy).
Nie napisałeś czy wszystko (url, title, content) ma być unikalne.
zimack
Twój pomysł z wymazaniem tego spowoduje, ze nie wyswietlą sie linki w ogole, a nie o to chodzi. Mi chodzi o to, ze 2 wyszukiwarki zwracaja 16 wyników, wśrod nich są np. 4 takie same, wiec powinnien wyswietlic 12 wyników, bo 4 sie powtarzaja smile.gif, wiesz o co chodzi?

A co do Twojego pytania, to title, url i content maja unikalne smile.gif.
ziqzaq
Dostajesz 16 wyników. Każdy wynik ma url (ja oparłem się na url jako unikalnym, jeden wynik, jeden url).
Jeśli zrobimy to moim sposobem to wyniki o takim samym url będą się niwelować, tak? - Tablica asocjacyjna gdzie klucze to urle, jak przypisujesz nowy url taki sam jak stary to w tablicy zostaje i tak tylko jeden.
Cytat
Twój pomysł z wymazaniem tego spowoduje, ze nie wyswietlą sie linki w ogole

A jak je wyświetlasz? Mój kod zmienia strukturę tej twojej tablicy ($search_results). Zmieniłeś sposób jej wyświetlania?
Cytat
A co do Twojego pytania, to title, url i content maja unikalne

Jak mają unikalne skoro piszesz, że ci się powtarzają?

Edit:
Może czegoś nie łapię, fakt.
Niedziela mózg nie rozgrzany itd... winksmiley.jpg
zimack
Cytat
Dostajesz 16 wyników. Każdy wynik ma url (ja oparłem się na url jako unikalnym, jeden wynik, jeden url).



Google zwraca 8 wyników, Yahoo 10 wyników. Wpisując dane słowo do wyszukiwarki, zdaża się, ze w 1 albo 2 znajdzie te same URL.

Np. nasza klasa, to w Google zwróci wynik www.nasza-klasa.pl i w Yahoo to samo. Zwróci 18 wyników w sumie, ale wśród nich bedą 2 te same www.nasza-klasa.pl , chcialbym aby zwrócił 17 wyników, bez tego co sie powtórzył smile.gif.

Teraz powinnieneś zajarzyć o co mi chodzi tongue.gif.
ziqzaq
Coś mi się widzi, że jednak zajarzyłem od samego początku.
A to jest unikalne czy nie (tylko nie wnikaj w to, że wyniki mam w tablicach - tak było szybciej)?
  1. <?php
  2. // Przykładowe wyniki w tablicach (u ciebie to obiekty, whatever)
  3. $wyniki_1 = array(
  4.    array( 'url' => 'http://www.nasza-klasa.pl', 'title' => 'nieważne'),
  5.    array( 'url' => 'http://klasa.pl', 'title' => 'nieważne'),
  6.    array( 'url' => 'http://studia.pl', 'title' => 'nieważne'),
  7.    array( 'url' => 'http://programowanie.pl', 'title' => 'nieważne')
  8. );
  9. $wyniki_2 = array(
  10.    array( 'url' => 'http://www.nasza-klasa.pl', 'title' => 'nieważne'),
  11.    array( 'url' => 'http://stara-klasa.pl', 'title' => 'nieważne'),
  12.    array( 'url' => 'http://studio-lotto.pl', 'title' => 'nieważne'),
  13.    array( 'url' => 'http://4programmers.pl', 'title' => 'nieważne')
  14. );
  15.  
  16. $i = 0;
  17. $search_results = array();
  18.  
  19. foreach($wyniki_1 as $r)
  20. {
  21.   $search_results[$r['url']]['title'] = $r['title'];
  22.   //$search_results[$r->url]['content'] = $r->content;
  23.   $i++;
  24. }
  25. foreach($wyniki_2 as $t)
  26. {
  27.   $search_results[$t['url']]['title'] = $t['title'];
  28.   //$search_results[$t->Url]['content'] = $t->Summary;
  29.   $i++;
  30. }
  31.  
  32.  
  33. echo 'Ilość wszystkich: '.(count($wyniki_1) + count($wyniki_2)).'<br/>';
  34. echo 'Ilość unikalnych: '.(count($search_results)).'<br/>';
  35. echo '<pre>'.print_r($search_results,true).'</pre>';
  36. ?>
zimack
Na priv wyslałem Ci wiadomosc z moim kodem, moglbys to sprawdzic? Tam jest wlasnie zapytanie Nasza-klasa, zwraca ono jako 1 wynik www.nasza-klasa.pl i jako 9 wynik znów jest www.nasza-klasa.pl. 1 wynik jest z google, 2 z yahoo. Chodzi mi, zeby tylko 1 byl wyswietlany.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.