Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyciąganie tylko jednego rekordu z xml
Forum PHP.pl > Forum > PHP
mb83
Witam
Pewnie dla Was problem dziecinny ale ja nie wiem jak go rozwiązać.

Mam tablicę z pliku XML generującą kurs walut:
  1. [0] => SimpleXMLElement Object
  2. (
  3. [nazwa_waluty] => bat (Tajlandia)
  4. [przelicznik] => 1
  5. [kod_waluty] => THB
  6. [kurs_sredni] => 0,0971
  7. )
  8.  
  9. [1] => SimpleXMLElement Object
  10. (
  11. [nazwa_waluty] => dolar amerykański
  12. [przelicznik] => 1
  13. [kod_waluty] => USD
  14. [kurs_sredni] => 3,0978
  15. )
  16.  
  17. [2] => SimpleXMLElement Object
  18. (
  19. [nazwa_waluty] => dolar australijski
  20. [przelicznik] => 1
  21. [kod_waluty] => AUD
  22. [kurs_sredni] => 2,9024
  23. )
  24.  
  25. [3] => SimpleXMLElement Object
  26. (
  27. [nazwa_waluty] => dolar Hongkongu
  28. [przelicznik] => 1
  29. [kod_waluty] => HKD
  30. [kurs_sredni] => 0,3998
  31. )
  32.  
  33. [4] => SimpleXMLElement Object
  34. (
  35. [nazwa_waluty] => dolar kanadyjski
  36. [przelicznik] => 1
  37. [kod_waluty] => CAD
  38. [kurs_sredni] => 2,8505
  39. )


jak za pomocą wyciągnąć tylko jeden rekord np. trzeci [3] - w tym przypadku dolar kanadyjski CAD.

kod do pobierania całej tabeli mam taki:
  1. function nazwa_aktualnego_kursu() {
  2. $tresc = file_get_contents('http://nbp.pl/Kursy/KursyA.html');
  3. $wzorzec = '/xml\/[\d\w]+\.xml/';
  4. $sukces = preg_match($wzorzec, $tresc, $pasujace);
  5.  
  6. if (empty($pasujace))
  7. exit('Blad: Nie znaleziono tabeli kursow.');
  8.  
  9. return 'http://nbp.pl/Kursy/'.$pasujace[0];
  10. }
  11. $aktualny_kurs = nazwa_aktualnego_kursu();
  12. $tresc = file_get_contents($aktualny_kurs);
  13.  
  14. $xml = simplexml_load_string($tresc);
  15. $tab = $xml->numer_tabeli;
  16. $dpu = $xml->data_publikacji;
  17. foreach ($xml->pozycja as $po):
  18. $cad1 = $po->przelicznik;
  19. $cad2 = $po->kod_waluty;
  20. $cad3 = $po->kurs_sredni;
  21. $cad3 = str_replace(',', '.', $cad3);
  22. $cad3 = round($cad3, 3);
  23. echo ("<p>$cad1 $cad2 = $cad3 zł</p>"); /* tu ma być "1 CAD = 2.58 zł"
  24.   echo '<pre>';
  25.   print_r($xml); /* a tu cała tablica*/
  26. echo '</pre>';
  27. endforeach;


dzięki za pomoc i wyrozumiałość :-)
Pyton_000
  1. $po = $xml->pozycja[4];
  2. $cad1 = $po->przelicznik;
  3. $cad2 = $po->kod_waluty;
  4. $cad3 = $po->kurs_sredni;
  5. $cad3 = str_replace(',', '.', $cad3);
  6. $cad3 = round($cad3, 3);
  7. echo ("<p>$cad1 $cad2 = $cad3 zł</p>");
mb83
super, o to chodziło tylko dlaczego pętla pokazuje nie jeden rekord a tyle co jest walut w pliku xml?
co dopisać, żeby tylko raz pokazało daną walutę?

edit:
ok, dałem radę (a raczej break; dał radę:-)
Pyton_000
to co podałem ma być zamiast pętli
mb83
a jeżeli zrobię cztery pętle (dla czterech walut) i przed każdym endoreach wstawię break; to jest źle? dlaczego?
by_ikar
Dlatego że pętla wtedy nie ma sensu. Odwołaj się do konkretnej tablicy wewnątrz, zamiast wrzucać to w pętle.
Pyton_000
To tak jakbyś kupił paczkę paluszków, zabrał jednego a resztę wywalił wink.gif
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.