Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Przeszukiwanie tablicy dwuwymiarowej, zwracanie klucza
ficiek
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 1
Dołączył: 9.09.2011
Skąd: Kraków

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


Niestety napotkałem problem z którym nie mogę sobie poradzić.

Tablica zbudowana jest w poniższy sposób. Przechowuje ona elementy znalezione w bazie MySQL, pasujące do podanych przez użytkownika słów. Każde podane słowo jest wyszukiwane osobno, podany tekst nie jest traktowany jako fraza.
  1. (
  2. [0] => Array
  3. (
  4. [id] => 1
  5. [header] => Artykuł
  6. [date] => 1317559793
  7. [relevance] => 1
  8. )
  9. )

Chcę jednak uniknąć powtórzeń. Można by łatwo uniknąć tego wykonując na tablicy array_unique(), ale jak zapewne ktoś się domyślił relevance przechowuje liczbę pasujących wyszukiwanych słów. Przy ich pomocy będzie można odpowiednio wyświetlić wyniki.

Przechodzimy do sedna: muszę wyszukać w takiej dwuwymiarowej tablicy czy wpisano już taki artykuł. Jeśli tak revelance+=1. Jeśli nie dodajemy do tablicy.
  1. if (w tablicy $found znajduje się wiersz w którym id=$foo)
  2. {
  3. $found[ten wiersz]['relevance']+=1;
  4. }
  5. else
  6. {
  7. dodajemy do tablicy;
  8. }


Nie udało mi się wykorzystać array_search, prawdę mówiąc nie jestem nawet pewien czy ta funkcja działa dla dwuwymiarowej tablicy. Jestem otwarty na inne rozwiązania całego procesu wyszukiwania.
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1.  
  2. function qq($slowo, $array) {
  3.  
  4. $query = mysql_query(w zapytanie wrzucasz szukane słowo);
  5.  
  6. while($row = mysql_fetch_assoc($query)) {
  7.  
  8. if(array_key_exists($row['id'], $array)) {
  9.  
  10. $array['rele'][$row['id']]++;
  11. }
  12. else {
  13.  
  14. $array[$row['id']] = $row;
  15. }
  16. }
  17.  
  18. return $array;
  19. }
  20.  
  21. $array = array();
  22. foreach($szukane_frazy as $v) {
  23.  
  24. $array = qq($v, $array);
  25. }
  26.  
  27. print_r($array);



ps. a nie lepiej zrobić to po stronie mysql?? może pokaż zapytanie

Ten post edytował CuteOne 22.10.2011, 14:06:38
Go to the top of the page
+Quote Post
Dominis
post
Post #3





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


Jeśli dobrze zrozumiałem twoje pytanie to lepiej będzie zrobić tak jak kolega wyżej wspomniał, za pomocą mysql.

Zapytanie:

  1. SELECT id_artykul, header, COUNT(*) FROM tabela GROUP BY id_artykul ORDER BY DATA DESC


To zapytanie zwróci Ci id artykulu, header i liczbe ile tych artykulow pokazalo sie.


--------------------
www.maxcode.pl
Go to the top of the page
+Quote Post
ficiek
post
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 1
Dołączył: 9.09.2011
Skąd: Kraków

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


Udało się, ale teraz stoję przed problemem posortowania tabeli malejąco wg relevance. Muszę ponownie prosić o pomoc, bo chyba źle rozumiem działanie funkcji array_multisort() - jakbym jej nie formułował nie zmienia się absolutnie nic.
Go to the top of the page
+Quote Post
Dominis
post
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


Kurcze, przynajmniej napisałbyś jak to zrobiles? za pomoca zapytania? Czy męczyłeś sie tablicami?

Jeśli za pomoca zapytania to mozesz zrobic:
  1. SELECT id_artykul, header, COUNT(*) AS rev FROM tabela GROUP BY id_artykul ORDER BY rev DESC


i odrazu masz posortowane, cud, miód i orzeszki.

Jeśli wybrałeś drogę trudniejsza, czyli bawisz sie tablicami to szukaj w google:

http://webhosting.pl/W.jaki.sposob.posorto...a.tablice.w.PHP
http://forum.php.pl/lofiversion/index.php/t20799.html

a najlepiej w manualu:

http://php.net/manual/en/function.array-multisort.php


--------------------
www.maxcode.pl
Go to the top of the page
+Quote Post
ficiek
post
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 1
Dołączył: 9.09.2011
Skąd: Kraków

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


Zanim zadałem pytanie przeczytałem w necie na ten temat (w tym to co podałeś) i nic. Dziwi mnie to bo prawdopodobnie jest to banalne.

Co do rozwiązania to wykonuję jedno zapytanie które szuka wszystkich słów, a potem w PHP obliczam trafność dla danego artykułu. Po prostu pomimo przeczytania manuala i masy stron internetowych nie mogę posortować tablicy z wynikami po relevancy. Wygląda ona tak jak podałem w pierwszym poście.
Go to the top of the page
+Quote Post
Dominis
post
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


  1. <?php
  2. //tablica id|arty|data|rev
  3. $tabArr[0] = Array(2, 'art', '', 6);
  4. $tabArr[1] = Array(1, 'art', '', 10);
  5. $tabArr[2] = Array(2, 'art', '', 6);
  6. $tabArr[3] = Array(1, 'art', '', 44);
  7. $tabArr[4] = Array(2, 'art', '', 2);
  8. $tabArr[5] = Array(1, 'art', '', 0);
  9. $tabArr[6] = Array(2, 'art', '', 6);
  10. $tabArr[7] = Array(1, 'art', '', 4);
  11.  
  12. //wyswietlenie tablicy
  13. foreach($tabArr as $row){
  14. echo '<br />';
  15. foreach($row as $wynik)
  16. echo '|'.$wynik;
  17. }
  18.  
  19. //zrobienie pomocniczej tablicy do sortowania
  20. $i=0;
  21. foreach($tabArr as $row){
  22. $i++;
  23. //nasz rev
  24. $pomArr[$i] = $row[3];
  25. }
  26.  
  27. //sortowanie
  28. array_multisort($pomArr, SORT_ASC, $tabArr);
  29. echo '<br />********************<br />';
  30.  
  31. //wyswietlenie posortowanej tablicy
  32. foreach($tabArr as $row2){
  33. echo '<br />';
  34. foreach($row2 as $wynik2)
  35. echo '|'.$wynik2;
  36. }
  37. ?>


wynik:

  1. |2|art||6
  2. |1|art||10
  3. |2|art||6
  4. |1|art||44
  5. |2|art||2
  6. |1|art||0
  7. |2|art||6
  8. |1|art||4
  9. ********************
  10.  
  11. |1|art||0
  12. |2|art||2
  13. |1|art||4
  14. |2|art||6
  15. |2|art||6
  16. |2|art||6
  17. |1|art||10
  18. |1|art||44


Ten post edytował Dominis 22.10.2011, 20:12:31


--------------------
www.maxcode.pl
Go to the top of the page
+Quote Post
ficiek
post
Post #8





Grupa: Zarejestrowani
Postów: 28
Pomógł: 1
Dołączył: 9.09.2011
Skąd: Kraków

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


Dzięki, wygląda na to że popełniałem błąd w tablicy pomocniczej, więc funkcja dostawała po prostu błędne parametry. Dziękuję wszystkim za odpowiedzi.
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 Aktualny czas: 22.08.2025 - 04:24