Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]jak wyswietlic elementy klasy stdClass bez względu na ilośc elementów ?
Forum PHP.pl > Forum > PHP
wiewiorek
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 ?
erix
Próbowałeś rzutowania na tablicę?

A tak btw, get_object_vars. winksmiley.jpg
wiewiorek
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
erix
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. }
wiewiorek
no niestety też nie pomogło
erix
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.
wiewiorek
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. }
erix
Przecie napisałem praktycznie to samo...?
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.