Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]jak wyswietlic elementy klasy stdClass bez względu na ilośc elementów ?
wiewiorek
post 18.08.2010, 15:23:46
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

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


SoapClient() zamienia mi przekazaną tablicę z jedną pozycją zamówienia:
  1. $tab['numer'] = '56';
  2. $tab['pozycjaZamowienia'][0]['nazwa'] = 'kot';
  3. $tab['pozycjaZamowienia'][0]['ilosc'] = 1;


na obiekt bez tablicy pozycji zamówienia:

  1. stdClass Object ( [numer] => 56 [pozycjaZamowienia] => stdClass Object ( [nazwa] => kot [ilosc] => 1 ) )


Natomiast tablicę z więcej niż jedną pozycją:
  1. $tab['numer'] = '57';
  2. $tab['pozycjaZamowienia'][0]['nazwa'] = 'pies';
  3. $tab['pozycjaZamowienia'][0]['ilosc'] = 1;
  4. $tab['pozycjaZamowienia'][1]['nazwa'] = 'wiewiorka';
  5. $tab['pozycjaZamowienia'][1]['ilosc'] = 1;


na obiekt z tablicą pozycji zamówienia:

  1. stdClass Object ( [numer] => 57 [pozycjaZamowienia] => Array ( [0] => stdClass Object ( [nazwa] => pies [ilosc] => 1) [1] => stdClass Object ( [nazwa] => wiewiorka [ilosc] => 1 ) ) )

Więc w pierwszym wypadku żeby przejść po elementach pozycji zamówienia trzeba pisać bez wykorzystania pętli:
  1. $nazwa = $tab->pozycjaZamowienia->nazwa;
  2. $ilosc = $tab->pozycjaZamowienia->ilosc;


a w drugim wypadku trzeba pisac z wykorzystaniem pętli:
  1. for($i = 0; $i < count($tab->pozycjaZamowienia); $i++)
  2. {
  3. $nazwa = $tab->pozycjaZamowienia[$i]->nazwa;
  4. $ilosc = $tab->pozycjaZamowienia[$i]->ilosc;
  5. }


Nie ma jakiegoś bardziej uniwersalnego sposobu, żeby zawsze można było używać pętli ?

Ten post edytował wiewiorek 18.08.2010, 15:25:18
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
erix
post 18.08.2010, 15:30:37
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Próbowałeś rzutowania na tablicę?

A tak btw, get_object_vars. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
wiewiorek
post 18.08.2010, 15:45:33
Post #3





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

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


Próbowałem tak:
  1. $pozycje = get_object_vars($tab->pozycjaZamowienia);
  2. foreach($pozycje as $pozycja)
  3. {
  4. $nazwa = $pozycja['nazwa'];
  5. $ilosc = $pozycja['ilosc'];
  6. }


oraz tak:
  1. $pozycje = (array)$tab;
  2. foreach($pozycje['pozycjaZamowienia'] as $pozycja)
  3. {
  4. $nazwa = $pozycja['nazwa'];
  5. $ilosc = $pozycja['ilosc'];
  6. }


i wciąż jak jest tylko jedna pozycja to mi to nie działa sad.gif
Go to the top of the page
+Quote Post
erix
post 18.08.2010, 15:56:09
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jedyne, co mi przychodzi do głowy, to:

  1. $pozycje = (array)$tab;
  2. foreach($pozycje['pozycjaZamowienia'] as $pozycja)
  3. {
  4. extract($pozycja);
  5. // zmienne są
  6. }


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
wiewiorek
post 18.08.2010, 16:03:03
Post #5





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

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


no niestety też nie pomogło
Go to the top of the page
+Quote Post
erix
post 18.08.2010, 16:10:44
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A, chyba źle zrozumiałem.

  1. function convertObj(stdClass $obj){
  2. if(isset($obj->nazwa)){
  3. return array($obj);
  4. }
  5.  
  6. return $obj;
  7. }
  8.  
  9. $pozycje = convertObj($pozycje);
  10.  
  11. foreach($pozycje as $pozycja)
  12. {
  13. extract($pozycja);
  14. // zmienne są
  15. }


Oczywiście dostosować sobie musisz sam.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
wiewiorek
post 18.08.2010, 18:16:57
Post #7





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

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


Chyba mam rozwiązanie:
  1. $pozycje = array();
  2. if(!is_array($tab->pozycjaZamowienia)) $pozycje[] = $tab->pozycjaZamowienia; //jesli jedna pozycja
  3. else $pozycje = $tab->pozycjaZamowienia;
  4.  
  5. for($i = 0; $i < count($pozycje); $i++)
  6. {
  7. $nazwa = $pozycje[$i]->nazwa;
  8. $ilosc = $pozycje[$i]->ilosc;
  9. }


Ten post edytował wiewiorek 18.08.2010, 18:17:32
Go to the top of the page
+Quote Post
erix
post 18.08.2010, 21:30:03
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Przecie napisałem praktycznie to samo...?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 17:26