Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

[php] przeszukiwanie tablicy

Zdecydowałeś się na tworzenie interaktywnych stron przy pomocy PHP? Chcesz w łatwy i szybki sposób zarządzać danymi na swojej stronie? Tutaj znajdziesz pomoc w napotkanych przy tym trudnościach.

[php] przeszukiwanie tablicy

Post 26.04.2005, 20:50:26

Mam tabele w HTML z danymi, ktora pobralem ze strony i wrzucilem do tablicy. Wszystko ladnie sie wyswietla, tylko teraz mam pytanie, jak moge przeszukac kazda linijke tablicy w poszukiwania frazy dwuwyrazowej ?

np. mam taka tabele

Kod: Zaznacz cały
..
<tr bgcolor=#E4E6EF><td align=right>1.</td><td align=left>druzyna 1</td><td align=center>34</td><td align=center>85</td><td align=center>26-7-1</td><td align=center>65-13</td></tr>
<tr bgcolor=#E4E6EF><td align=right>2.</td><td align=left>[b]druzyna 2[/b]</td><td align=center>34</td><td align=center>74</td><td align=center>22-8-4</td><td align=center>74-33</td></tr>
..


kazka linijka tabeli tj. <tr>...</tr> to osobna linijka w tablicy. i teraz chcialbym przeszukac owa tablice i znalezc linijke w ktorej jest fraza "druzyna 2" . domyslam sie ze trzeba to jakos zrobic wyrazeniami regularnymi, jednak nie jestem w tym dobry, wiec prosilbym o mala pomoc :P jakby cos bylo nie jasne to prosze pisac ! :)
Avatar użytkownikaSlipKid
Posty: 312
Dołączył(a): 04.06.2003
Lokalizacja: Stalowa Wola

Post 26.04.2005, 22:04:05

Kod: Zaznacz cały
<?php
$search = in_array("co", $tablica);
if($search)
 {
 echo'znalazlem';
 }
?>
[ RedDragon ] - Bardzo ciekawa strategiczna Gra On-line.
[ Bash ] - Nic nie bawi tak jak życie.
Avatar użytkownikavaderek
Maciek Koprek

Posty: 767
Dołączył(a): 07.01.2004
Lokalizacja: Wrocław

Post 26.04.2005, 22:29:29

Funkcje typu: in_array, array_search, array_keys nie bardzo się nadają w tym przypadku, gdyż wyszukują elementy tablicy równe poszukiwanej wartości, a nie ją zawierające. Niekoniecznie od razu trzeba się też odwoływać do wyrażeń regularnych, to w głównej mierze zależy od tego, czy poszukiwany ciąg może znaleźć się tylko w zakładanym przez nas miejscu, czy także gdzie indziej. W tym wypadku, czy w danym wierszu (<tr>) tylko jedna komórka (<td>) może zawierać to przykładowe 'druzyna 2'. Jeśli tak można użyć do poszukiwań funkcji strpos. Poniżej zamieszczam przykładowy kod:
Kod: Zaznacz cały
<?php
$tab = array();
$tab[] = '<tr bgcolor=#E4E6EF><td align=right>1.</td><td align=left>druzyna 1</td><td align=center>34</td><td align=center>85</td><td align=center>26-7-1</td><td align=center>65-13</td></tr>';
$tab[] = '<tr bgcolor=#E4E6EF><td align=right>2.</td><td align=left>druzyna 2</td><td align=center>34</td><td align=center>74</td><td align=center>22-8-4</td><td align=center>74-33</td></tr>';
$tab[] = 'druzyna 2'; //dodatkowy element do celów testowych

$keys = array();
foreach($tab as $key => $value){
   $search = 'druzyna 2';
   if( strpos($value, $search) !== false ){   // Operator !== został użyty w celu odróżnienia false od 0
      $keys[] = $key;
   }
}
print_r($keys);
?>


Po wykonaniu tego kodu w zmiennej $keys znajdą się klucze, dla których wartości w tablicy $tab zawierają szukaną frazę ('druzyna 2'). W tym wypadku tablica $keys będzie zawierać wartości 1 oraz 2 (będzie to widać w outpucie z print_r).
Pozdrawiam.
BYKOM-STOP!
amwoan
Posty: 34
Dołączył(a): 25.04.2005

Post 27.04.2005, 19:58:44

troszke to przerobilem, ale nie chodzi :/ niby dobrze wyglada, ale nie trybi ;]

Kod: Zaznacz cały
<?php
   $tabela = file('XXXXXXXXXXXXX');
   
   foreach($tabela as $nr => $key){
      $search = 'Manchester United';
      if( strpos($key, $search) !== false ){
         $mu = $nr;
      }
   }
   
   for($i=305; $i<366; $i++){
      
      if ( $i == $mu ){
         $tabela = str_replace('#E4E6EF', '#000000', $tabela);
      }
      else {
         $tabela = str_replace('#E4E6EF', '#CC0000', $tabela);
      }
      echo ''.$tabela[$i].'';
   }
?>


linie dobrze znajduje, ale ten warunek $i == $mu cos nie zaskakuje :/
Avatar użytkownikaSlipKid
Posty: 312
Dołączył(a): 04.06.2003
Lokalizacja: Stalowa Wola

Post 27.04.2005, 21:52:05

Kod: Zaznacz cały
<?php
...
        if ( $i == $mu ){
            $tabela = str_replace('#E4E6EF', '#000000', $tabela);
        }
        else {
            $tabela = str_replace('#E4E6EF', '#CC0000', $tabela);
        }
        echo ''.$tabela[$i].'';
...
?>

Zarówno za if, jak i else, używasz zmiennej $tabela, która jest tablicą. Nie możesz tym samym zamieniać w niej żadnego stringa. Powinieneś użyć w tamtych miejscach $tabela[$i], gdyż to są stringi zawierające poszczególne wiersze tabeli, tak jak to robisz w przypadku echo.
Pozdrawiam.
BYKOM-STOP!
amwoan
Posty: 34
Dołączył(a): 25.04.2005

Post 28.04.2005, 18:31:22

tak tez nie dziala, probowalem :] a samo $tabela tez chyba moze byc bo warunek else dobrze sie wykonuje, tylko nie wiem czego $i == $mu nie chce zatrybic :/
Avatar użytkownikaSlipKid
Posty: 312
Dołączył(a): 04.06.2003
Lokalizacja: Stalowa Wola

Post 28.04.2005, 20:51:48

SlipKid napisał(a):... a samo $tabela tez chyba moze byc bo warunek else dobrze sie wykonuje ...

Nie no, użycie $tabela jest bez sensu... Tzn to jest tak, jeśli użyjesz str_replace na tabeli, a nie jej wierszu, to zostaną zamienione wszystkie znalezione wartości we wszystkich wierszach. Tym samym pierwsze spełnienie warunku if (lub else) podmieni wszystkie '#E4E6EF' na '#000000' (lub '#CC0000'). Tak więc idź za moją poprzednią radą i stosuj $tabela[$i]. Powinno śmigać. ;)

Natomiast, jeśli nadal nie będzie spełniony ani razu warunek if, tzn, że po prostu nie jest spełniony. :P Nie wiem, widzę, że używasz pewnego zakresu dla $i, może tam nie ma wartości odpowiadającej $mu. Najlepiej daj sobie echo $mu; po zakończeniu pętli foreach i zobacz jaką ma wartość.

Aha i pamiętaj, że w takiej postaci, jak to robisz teraz (mam na myśli pierwszą pętlę), zmienna $mu będzie zawierała informacje dotyczące tylko ostatniego znalezionego wiersza z danym wyrażeniem (zakładając, że mogłyby się powtarzać). Jeśli taka sytuacja może zaistnieć polecam rozważenie przykładu, który zamieściłem w pierwszym poście tutaj.
Pozdrawiam.
BYKOM-STOP!
amwoan
Posty: 34
Dołączył(a): 25.04.2005

Post 29.04.2005, 06:43:51

ok z tym $tabela[$i] to zmienie, ale tak. for ma zakres, ale $mu sie w nim miesci :> bo $mu ma wartosc 313. a fraza jaka szukam jest tylko 1 w calej tabeli, wiec wystarczy mi to co mam, tylko nie wiem czego nie smiga ;-)
Avatar użytkownikaSlipKid
Posty: 312
Dołączył(a): 04.06.2003
Lokalizacja: Stalowa Wola

Post 29.04.2005, 13:51:19

Na pewno po modyfikacjach, jakie Ci poradziłem, ten Twój kod działa (dla pewności sprawdziłem to również w praktyce). Może wprowadziłeś jakieś inne zmiany, które powodują zmianę tego faktu,nie wiem. Najlepiej zamieść listing z tego co masz obecnie, wtedy będę mógł się ja, bądź ktoś inny, szerzej wypowiedzieć.
Pozdrawiam.
BYKOM-STOP!
amwoan
Posty: 34
Dołączył(a): 25.04.2005

Post 29.04.2005, 15:22:04

oto caly kod:

Kod: Zaznacz cały
<?php
   $tabela = file('http://tutaj.adres.strony.z.tabela.pl');
   
   foreach($tabela as $nr => $key){
      $search = 'Manchester United';
      if( strpos($key, $search) !== false ){
         $mu = $nr;
      }
   }
      
   for($i=305; $i<366; $i++){
      
      if ( $i == $mu ){
         $tabela[$i] = str_replace('#E4E6EF', '#000000', $tabela[$i]);
      }
      else {
         $tabela[$i] = str_replace('#E4E6EF', '#CC0000', $tabela[$i]);
      }
      echo ''.$tabela[$i].'';
   }
?>


please help xD
Avatar użytkownikaSlipKid
Posty: 312
Dołączył(a): 04.06.2003
Lokalizacja: Stalowa Wola

Post 29.04.2005, 22:51:21

Hm, jeśli pierwsza pętla rzeczywiście coś znajduje, a zmienna $mu po jej przejściu zawiera się w przedziale, dla którego sprawdzasz $i, to nie widzę sposobu, aby to nie działało. Tym samym nie jestem w stanie Ci pomóc, jedyne co mogę poradzić, to abyś przeprowadził we własnym zakresie szerszy debug, jak np sprawdzenie zmiennej $mu, następnie co się dzieje w każdym kroku pętli for, co zwraca funkcja str_replace itd... Niestety bez konkretnych danych źródłowych nie jestem w stanie nic więcej powiedzieć.

Ponieważ nie będzie mnie tu przez długi weekend, mogę w tej chwili życzyć jedynie powodzenia i szybkiego rozwiązania problemu.
Pozdrawiam.
BYKOM-STOP!
amwoan
Posty: 34
Dołączył(a): 25.04.2005

Post 29.04.2005, 23:58:15

ok, wielkie dzieki za pomoc :) mam kolege ktory dobrze sie zna na php, wiec mam nadzieje ze on mi pomoze :]
Avatar użytkownikaSlipKid
Posty: 312
Dołączył(a): 04.06.2003
Lokalizacja: Stalowa Wola


Powrót do PHP i bazy danych


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 19 gości

Hosting, Domeny, SSL

Subskrypcja

Mamy 50683 zarejestrowanych użytkowników.
Najnowszy użytkownik: YIDMayra


Nasi użytkownicy napisali:

  • 936071 wiadomości
  • w 246716 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)