Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Pobranie wartości z tabeli
Ulysess
post
Post #1





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


witam dziś już próbowałem w innym temacie rozwiązania tego problemu ale nie udało mi się .......... podejrzewam że źle chciałem się do tego zabrać więc zacznę od początku. otóż mam tabele w której oprócz 1 wiersza następne wyglądają tak:
  1. <tr id="tlo_piaskowe_czarne" align="center">
  2. <td height="20">40.</td>
  3. <td><b><font color="#FF9900">Marek</font></b></td>
  4. <td><b>23</b></td>
  5. <td>152,767</td>
  6. </tr>


chciałbym dla wszystkich wierszy pobrać wartości z 2 3 i 4 Kolumny jak miało by to wyglądać ,czy to jest do wykonania questionmark.gif jeśli tak to jak.. z góry dziękuje za zainteresowanie.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
Daiquiri
post
Post #2





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Na chama możesz przecież skorzystać z explode()... chyba, że czegoś nie rozumiem smile.gif.
Go to the top of the page
+Quote Post
Ulysess
post
Post #3





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


hmmm pisze z pamięci ale czy to miało by tak wyglądac:
  1. $tablica = explode("<td> ", $strona);

questionmark.gif jesli tak to czy nie powstała by 1 wielka tablica questionmark.gif
Go to the top of the page
+Quote Post
Daiquiri
post
Post #4





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Zakładałam, że tabelkę z HTML masz w zmiennej. Wtedy otrzymasz tablicę z pozycjami wierszy. Dodatkowa pętla może Ci pomóc "zgarnąć" tylko te dane, które Cię interesują.
Go to the top of the page
+Quote Post
Ulysess
post
Post #5





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


cała zawartosc strony jest pod zmienna.. ;p mógłbyś mniej więcej pokazać jak by to miało wyglądać questionmark.gif
Go to the top of the page
+Quote Post
lord2105
post
Post #6





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


  1. $tablica = explode("<td> ", $strona);


później daj sobie:

  1. var_dump($tablica);


i wedle kluczy wyciągnij co potrzebujesz:

np:

  1. echo $tablica[3];


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
Ulysess
post
Post #7





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


żeby nie czekac na gotowe sam kombinuje , zapewne początek wygląda tak
  1. $tablica = explode("<tr id=\"tlo_piaskowe_czarne\" align=\"center\">", $page);
questionmark.gif

Go to the top of the page
+Quote Post
Daiquiri
post
Post #8





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Najpierw wyciągnij sobie do zmiennej samą tabelkę (sposobem dowolnym). Potem np. $tab = explode("<td>", $zmienna) - otrzymasz tablicę z poszczególnymi wierszami. Wyczyść ją z tagów htmlowskich i skorzystaj z np. pętli, żeby wyciągnąć tylko te dane, które Cię interesują. Jeżeli interesuje Cię np. co trzecia wartość z tablicy wszystkich danych, to:
  1. for ($i=0; $i < count($tab); ++$i) {
  2. if ($i%3 == 0) $tab2[] = $tab[$i];
  3. }


@up
Explode() rób z wartości powtarzalnych. Pierwsza wartość jest przecież "dzielnikiem".

Ten post edytował Daiquiri 18.09.2010, 15:39:32
Go to the top of the page
+Quote Post
Ulysess
post
Post #9





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


hmm zrobiłem specialnie zmienną tylko z 2 wierszami TR ->
  1. $page = '<tr id="tlo_piaskowe_czarne" align="center">
  2. <td height="20">40.</td>
  3. <td><b><font color="#FF9900">Marek</font></b></td>
  4. <td><b>23</b></td>
  5. <td>152,767</td>
  6. </tr>
  7. <tr id="tlo_piaskowe_czarne" align="center">
  8. <td height="20">41.</td>
  9. <td><b><font color="#FF9900">Jurek</font></b></td>
  10. <td><b>23</b></td>
  11. <td>152</td>
  12. </tr>
  13. ';
  14.  
  15. $tablica = explode("<td>", $page);
  16. for($i = 0;$i <= count($tablica);++$i)
  17. {
  18. echo strip_tags($tablica[$i]),'('.$i.')<br>';
  19. }


wydaje mi się że zrobiłem tak jak opisałeś Daiquiri i wychodzi (w moim przykładzie) że każda wartość to oddzielna zmienna.. to jak ja teraz rozpoznam że tablica1,2,3,4,5 jest Marka 6,7,8,9,10 Jurka itd.... questionmark.gif mam nadzieje że coś źle robie..

Ten post edytował Ulysess 18.09.2010, 15:56:10
Go to the top of the page
+Quote Post
Daiquiri
post
Post #10





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Bo korzystasz ze złego parametru w explode(). Przecież <td> nie występuje wszędzie (<td> to nie to samo co <td height="20">). Jeżeli natomiast interesują Cię dane bez tego co w <td height="20"> to zacznij od $i=1 nie $i=0.

Ten post edytował Daiquiri 18.09.2010, 16:08:27
Go to the top of the page
+Quote Post
Ulysess
post
Post #11





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


próbowałem to rozbić jeszcze bardziej i coś nie wychodzi..

  1. $tablica = explode("<td ", $page);
  2. for($i = 1;$i <= count($tablica)-1;++$i)
  3. {
  4. $tablica[$i] = strip_tags($tablica[$i]);
  5.  
  6. $tablica2 = explode(" ",$tablica[$i]);
  7.  
  8. for($k = 0;$k<=count($tablica2);++$k)
  9. {
  10. echo $tablica2[$k],'<br>';
  11. }
  12.  
  13. }


chodzi o to że chce zrobić aby każdy wiersz był w 1 wymiarze tablicy a w 2 znajdowaly się dla niego 3-4 dane niestety coś źle robie.. :/
Go to the top of the page
+Quote Post
Daiquiri
post
Post #12





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




  1. $tab1 = explode('<td height="20">', $page);
  2.  
  3. for ($i=1; $i<count($tab1); ++$i) {
  4. $tab2 = explode('<td>', $tab1[$i]);
  5.  
  6. for ($j=0; $j<count($tab2); ++$j) {
  7. echo $j . ". " . strip_tags($tab2[$j]) . "<br />";
  8. }
  9.  
  10. }



lub to samo tylko z zapisem do tablicy:
  1. $tab1 = explode('<td height="20">', $page);
  2.  
  3. for ($i=1; $i<count($tab1); ++$i) {
  4. $tab2 = explode('<td>', $tab1[$i]);
  5.  
  6. for ($j=0; $j<count($tab2); ++$j) {
  7. $tab[$i][$j] = strip_tags($tab2[$j]);
  8. }
  9.  
  10. }


Wtedy:
tab[0][0] - to będzie 40, tab[0][1] - to będzie "Marek" itd.
tab[1][0] - to będzie 41, tab[1][1] - to będzie "Jurek" itd.


Ten post edytował Daiquiri 18.09.2010, 17:01:04
Go to the top of the page
+Quote Post
Quantum
post
Post #13





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


explode tutaj ? bardziej sprawdziło by się przy rozbijaniu jakiegoś stringa na tablicę stałym separatorem, w tym przypadku dochodzi czyszczenie z tagów - zbędne.
  1. $source = '...'; // zawartość strony
  2.  
  3. preg_match_all('#<tr id=".*" align="center">
  4. <td height="20">.*</td>
  5. <td><b><font color=".*">(.*)</font></b></td>
  6. <td><b>(.*)</b></td>
  7. <td>(.*)</td>
  8. </tr>#', $source, $matches);
  9.  
  10. print_r($matches);

za (.*) możesz podstawić bardziej określony typ danych, ale to już zależy co tam w tej tabelce przedstawiasz

Ten post edytował Quantum 18.09.2010, 17:47:27
Go to the top of the page
+Quote Post
Daiquiri
post
Post #14





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Explode() było alternatywą (chamską, ale zawsze) dla preg_match.
Go to the top of the page
+Quote Post
Quantum
post
Post #15





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


swoją drogą, żeby nie wykonywać za każdym razem count($tab1) w for dobrą praktyką jest przypisywanie liczby do zmiennej i podstawianie w pętli, funkcja wykona się tylko raz, a nie tyle ile elementów ma tablica winksmiley.jpg
Go to the top of the page
+Quote Post
Daiquiri
post
Post #16





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Masz oczywiście rację smile.gif. Zwykle pomijam też takie rzeczy jak klamra w drugim for, ale chodziło mi tylko o ogólną koncepcję.
Go to the top of the page
+Quote Post
Ulysess
post
Post #17





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


wielkie dzięki za rozwiązanie problemu .. smile.gif niestety rozwiązanie z preg match nie działa poprawnie.. i jeszcze takie pytanie.. czemu jeśli robie pętla w pętli to nie powinienem zamykać tej drugiej klamrą questionmark.gif
Go to the top of the page
+Quote Post
Daiquiri
post
Post #18





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Możesz oczywiście zamknąć - ja po prostu zwykle to pomijam smile.gif. Na studiach zawsze nas facet od Javy ścigał za te klamry, bo w zasadzie nie trzeba ich tam stawiać.
Go to the top of the page
+Quote Post
Quantum
post
Post #19





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


działa jak należy, tylko nie zrób wcięć w patternie przypadkiem smile.gif

  1. $source = '<tr id="tlo_piaskowe_czarne" align="center">
  2. <td height="20">40.</td>
  3. <td><b><font color="#FF9900">Marek</font></b></td>
  4. <td><b>23</b></td>
  5. <td>152,767</td>
  6. </tr>
  7. <tr id="tlo_piaskowe_czarne" align="center">
  8. <td height="20">41.</td>
  9. <td><b><font color="#FF9900">Jurek</font></b></td>
  10. <td><b>23</b></td>
  11. <td>152</td>
  12. </tr>';
  13.  
  14. preg_match_all('#<tr id=".*" align="center">
  15. <td height="20">.*</td>
  16. <td><b><font color=".*">(.*)</font></b></td>
  17. <td><b>(.*)</b></td>
  18. <td>(.*)</td>
  19. </tr>#', $source, $matches);
  20.  
  21. $length = count($matches[0]);
  22.  
  23. for ( $i = 0; $i < $length; $i++ )
  24. {
  25. echo '1: ', $matches[1][$i];
  26. echo '<br/>2: ', $matches[2][$i];
  27. echo '<br/>3: ', $matches[3][$i];
  28. echo '<br/>', str_repeat('-', 10), '<br/>';
  29. }

powinieneś dostać taki wynik:
Kod
1: Marek
2: 23
3: 152,767
----------
1: Jurek
2: 23
3: 152
----------


Ten post edytował Quantum 19.09.2010, 13:57:14
Go to the top of the page
+Quote Post
Ulysess
post
Post #20





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


oo wielkie dzięki , działa smile.gif
ciekawostką jest to że rozwiązanie z explode wykonuje się szybciej od preg_match_all smile.gif
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: 20.08.2025 - 09:07