Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP] foreach pokazuje tylko pierwszą zmienną
Forum PHP.pl > Forum > Przedszkole
adek-
Witam robię sobie skrypt który z xml'a będzie wygrzebywał mi informacje do którego użyłem funkcji foreach, tak żeby mi wyciągał je w rządku jeden pod drugim. Niestety zapętla się tylko pierwszy parametr $rxn;. Mało sę znam na php i próbowałem sobie to trochę uprościć robiąc to w ten sposób, ale nie bardzo mi to wychodzi. Może zaiast foreach uży czegoś innego?

próbowałem nawet zrobić więcej foreachów (poniżej pokazuję tylko 3) i wkłądać w nie te zmienne po kolei, ale też nic nie działa

  1. <?
  2. echo ' <table><tr>';
  3. $rejsy = simplexml_load_file('dane/export.xml/baza.xml');
  4. $baza = simplexml_load_file('dane/export.xml/baza.xml');
  5. $rnazwa = $baza->rejsy->rejs->nazwa;
  6. $rtrasa = $baza->rejsy->rejs->trasa_rejsu;
  7. $rdataod = $baza->rejsy->rejs->data->od;
  8. $rstatek = $baza->rejsy->rejs->statek->nazwa;
  9. $rlinia = $baza->rejsy->rejs->statek->linia;
  10. $rpilot = $baza->rejsy->rejs->pilot;
  11. $pdzien = $baza->program->rejs->data->opis;
  12. $ccenaod = $baza->cennik->rejs->pozycja->cena->od;
  13. $cpromo = $baza->cennik->rejs->pozycja->promocja->opis;
  14.  
  15. foreach ($rejsy->rejsy->rejs as $rx) {
  16. foreach ($rx->nazwa as $rxn) {
  17. foreach ($rtrasa as $trasa) {
  18.  
  19. //###################
  20. echo '<td class="sl">&nbsp;</td><td class="rnazwa"><table><tr><td style="background-color: rgb(255, 255, 255); text-align: left; padding-left: 5px; width: 350px; font-size: 11px; vertical-align: bottom;">';
  21. echo '<a href="3147,wiosenne-fascynacje,rejs.html">';
  22. echo $rxn;
  23. echo '</a> </td></tr><tr><td style="background-color: rgb(255, 255, 255); text-align: left; padding-left: 5px; width: 350px; font-size: 10px; vertical-align: top;">';
  24. echo $rtrasa;
  25. echo '</td></tr></table>';
  26.  
  27. echo '<td style=\"background-color: rgb(255, 255, 255); text-align: left;\" width=\"100\">';
  28. echo '<a href="">';
  29. echo $rdataod;
  30. echo '<br><span class=\"greytext\">5 nocl.</span></a></td>';
  31.  
  32. echo '<td style="background-color: rgb(255, 255, 255); text-align: center;" width="20"><a href="3147,wiosenne-fascynacje,rejs.html"><img src="images/rejsy/promocja.png" title="PROMOCJA" border="0"></a></td>';
  33. echo '<td style="background-color: rgb(255, 255, 255); text-align: center;" width="40">';
  34. echo '<a href="3147,wiosenne-fascynacje,rejs.html">€&nbsp;389';
  35. echo $rcena;
  36. echo '</a></td><td style="background-color: rgb(255, 255, 255); text-align: right; padding-right: 5px;" width="100">';
  37. echo '<a href="3147,wiosenne-fascynacje,rejs.html">';
  38. echo $rstatek;
  39. echo '</a></td><td style="background-color: rgb(255, 255, 255); text-align: center; padding-right: 5px;" width="50">';
  40. echo '<a class="black" href="3147,wiosenne-fascynacje,rejs.html"><!--<img src="templates/namorzu/logo/costa.gif" alt="costa" border="0">-->';
  41. echo $rx->statek->linia;
  42. echo '</a></td>';
  43. echo ' <td width="20"></td></tr></table>';
  44. } }}
  45. ?>


PS 1: kiedyś w cmsie phpfusion jak przy znaku " nie dodawałem ukośnka \ (czyli \") to mi wyskakiwał błąd, a tutaj wszystko działa?
PS 2: w wypadku powyżej jak definiuje w css clasę class="rnazwa" w zewnętrznym pliku css i tam justuje text do lewej, to nie justuje mi go na stronie, a jak zrobię style="text-align: left;" bezpośrednio przy danym elemencie to wszystko działa? Czy PHP może coś knocić, ale raczej wnioskuje że to moja nieznajomość PHP?
Psychopath
1) Jeżeli wpisujesz echo 'coś'; to nie musisz używać ukośników przed ", ukośniki są po to, by php nie mylił kodu wewnątrz funkcji jako jej koniec. Czyli np:
  1. echo "<a href="x.php">x</a>";

Nie zadziała, bo php myśli, że przed x.php następuje koniec funkcji.

2) Spróbuj zrobić 2 deklaracje stylu css, jedną xml'ową, a jedną w metatagach. Jeżeli nie pomoże, oznacza to, że wpisujesz coś źle. Na pewno nie radze ci zostawiać styli w kodzie html. Powoduje to taki syf w kodzie, że potem zmiana czegoś to istna katorga.

3) Odnośnie odczytywanie xmla, to radzę ci użyć funkcji print_r() i zobaczyć, czy na pewno wszystkie dane są odczytane. Tablica jest wielowymiarowa, dlatego może sprawiać problemy jej rozpisanie. Polecam użyć kartki i na szybko sobie wszystko rozrysować, a potem napisać który foreach() do czego się odnosi, ja tak kiedyś robiłem gdy miałem większe wielowymiarowe tablice, zawsze pomagało. Nie mam niestety dostępu do pliku xml, dlatego nic więcej pomóc nie mogę.
Bardziej czytelna wersja:
  1. <?php
  2. echo "<pre>";
  3. print_r($tablica);
  4. echo "</pre>";
  5. ?>
adek-
Dziękuję Psychopath za print_r pomocna rzecz której nie znałem, chociaż już przed przystąpieniem do operacji na tym xmlu rozpisałem sobie go na kartce, czyli tak jak Ty to robiłeś smile.gif Jest to cholernie duży xml bo ma aż 51mb i sporo wpisów, ale wypadło mi się uczyć na tym a nie innym!
Skróconą wersję postaram się przedstawić w ten sposób poniżej. Te małpki to dane które próbuję wyciągnąć w pętlach foreach, ale chyba coś przekombinowałem. Żeby zrobić wiele foreach które będą wyrzucać wyniki jeden pod drugim powinienem zrobić coś a'la?
1. forech { foreach{$} foreach{$} foreach{$}}
czy bardziej każdy forach z osobna
2. foreach{$} foreach{$} foreach{$} - to próbowałem i cały czas samą funkcję mi w jednej lini wyrzucało w kółko zamiast kod html
czy też tak jak próbowałem, czyli porobiłem zmienne i zrobiłem jedno foreach z kilkoma zmiennymi
3. foreach {$ $ $ $}

  1. EXPORT
  2. <rejsy>
  3. |<rejs>
  4. | |<nazwa>@
  5. | |<data>
  6. | | |<od>@
  7. | | |<do>@
  8. | |<statek>
  9. | | |<nazwa>@
  10. | | |<linia>@
  11. | |<trasa_rejsu>@
  12. |</rejs>
  13. </rejsy>
  14. <cennik>
  15. |<rejs>
  16. | |<pozycja>
  17. | | |<cena>
  18. | | | |<od>@
  19. | |<promocja>
  20. | | |<od>@
  21. |<rejs>
  22. </cennik>

W razie jak by miało pomóc poniżej zamieszczam link do skróconego pliku xml do tylko 3 całych rekordów z wszystkimi danymi
baza.xml


//EDYTOWANO 25.04.2010!!!!!

  1. <td class="rnazwa">';
  2.  
  3. echo '<table border="1">';
  4. foreach ($rejsy->rejsy->rejs as $1) {
  5. echo '<tr><td>';
  6. echo '<a href="xx">';
  7. echo $1;
  8. echo '</a> </td></tr>';
  9. echo '<tr><td>';
  10. foreach ($rejsy->rejsy->rejs as $2) {
  11. echo $2;
  12. }
  13. echo '</td></tr>';
  14. }
  15. echo '</table>';

Prosta tabela (która jest częścią innej tabeli) ma wyrzucać w 1-wszym TD $1 i w 2-gim TD $2, wyrzuca mi $1 wielokrotenie ale po razie na TD tak jak powinno być, a $2 wilokrotnie w TD. Zapewne to dlatego, że zapętliłem foreach w forachu. Jak zrobić aby i to i to wyrzucało po razie?
screen w gifie

Szukałem i próbowałem kilka przykładów z
PHP manual - foreach
ale żadnym nie trafiłem... czy mógł by mi ktoś podpowiedzieć który sposób byłby właściwym w moim wypadku?

PS, czy są jakieś książki wyczerpujące temat jednej funkcji z przykładami np "foreach" jak na manual PHP questionmark.gif Zamierzam kupić książkę, ale z reguły jak oglądałem treść to były powierzchowni opisywane i po jednym przykładzie.
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.