Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Array_unique i JSON
zimack
post 25.01.2009, 14:27:51
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.01.2009

Ostrzeżenie: (0%)
-----


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++;

}

Ten post edytował zimack 25.01.2009, 14:29:46
Go to the top of the page
+Quote Post
ziqzaq
post 25.01.2009, 14:44:56
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował ziqzaq 25.01.2009, 14:46:02
Go to the top of the page
+Quote Post
zimack
post 25.01.2009, 15:01:08
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.01.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ziqzaq
post 25.01.2009, 15:09:29
Post #4





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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

Ten post edytował ziqzaq 25.01.2009, 15:10:21
Go to the top of the page
+Quote Post
zimack
post 25.01.2009, 15:14:58
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.01.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ziqzaq
post 25.01.2009, 15:26:04
Post #6





Grupa: Zarejestrowani
Postów: 428
Pomógł: 128
Dołączył: 17.06.2007

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
zimack
post 25.01.2009, 15:53:41
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.01.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:04