Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]foreach i podwójne unserialize
nikestylex7
post 15.09.2015, 13:45:05
Post #1





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Witam. Potrzebuje przeprowadzić unserialize dla dwóch array w jedej mam nazwy części a w drugiej ich ceny. Wszystko by grało gdyby przy zwracaniu cen zwraca mi wepchnięte null w jednym elemencie. Wynikiem jest zwrócenie pięciu wierszy gdzie w cenie mam pierwsze 3(0,1,2) potem null i potem kolejne 2 (4,5). Jak to naprawić ? Jakieś rozwiązania. Ponieważ gdy stosuję oddzielnie foreach dla ceny i nazw to wszystko gra tylko jednak nie mogę ich połączyć aby były w wierszach.

  1. <?php
  2. $i = 1;
  3. foreach (unserialize($value->rocznekoszty) as $rocznekoszty) {
  4. $cena = unserialize(stripslashes($value->cena));
  5. $count = $i++;
  6.  
  7. echo '<tr id="wiersz-'.$count.'">
  8. <td align="center" width="5%" height="5%">'.$count.'</td>
  9. <td width="45%" height="5%"><input type="text" size="33" value="'.$rocznekoszty.'"/></td>
  10. <td width="5%" height="5%"><input class="ctype_digit_dot" type="text" size="6" value="'.$cena[$count-1].'"/></td>
  11. <td align="center" width="2%" height="5%">zł</td>
  12. </tr>';
  13.  
  14.  
  15. }
  16.  
  17. ?>

Go to the top of the page
+Quote Post
KsaR
post 15.09.2015, 15:33:08
Post #2





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Dziś nie myślę, ale napisze co mozesz poprawic:

1. foreach (unserialize($value->rocznekoszty) (...).
Przerób to, zeby iterowalo po $value ogółem, a nie konretnej wlasnosci (->rocznekoszty).
Tzn. Np. foreach ($value as $v)...
Gdy juz sprawdzisz czy poprawnie zwraca (np. var_dump($v)) do tego to dopiero rob te zmienne.
$rocznekoszty = unserialize($v->cos);
$cena = unserialize(stripslashes($v->cena)); # poza tym, tu chyba powinna byc inna kolejnosc funkcji > ale nie wiem jak u ciebie to dziala biggrin.gif

Musial bys pokombinowac, z ta petla. Bo nie mam jak przetestowac czy dobrze.

2. Zmienna count.
$count = $i++;
Skasuj nią najlepiej, i zrob $i++; dopiero za tym echo. To bedziesz mial 1 zmienna zamiast 2.
--
Czyli mniej wiecej cos takiego:
<?php
  1. $i = 1;
  2. foreach ($value as $v) {
  3. $rocznekoszty = unserialize($v->cos);
  4. $cena = unserialize(stripslashes($v->cena));
  5.  
  6. echo '<tr id="wiersz-'.$i.'">
  7. <td align="center" width="5%" height="5%">'.$i.'</td>
  8. <td width="45%" height="5%"><input type="text" size="33" value="'.$rocznekoszty.'"/></td>
  9. <td width="5%" height="5%"><input class="ctype_digit_dot" type="text" size="6" value="'.$cena[$i-1].'"/></td>
  10. <td align="center" width="2%" height="5%">zł</td>
  11. </tr>';
  12. ++$i;
  13.  
  14. }
  15.  
  16. ?>

Ale miej na uwadze ten 1. Punkt bo moze nie dzialac jak trzeba. - przetestuj.

Ten post edytował KsaR 15.09.2015, 15:41:38


--------------------
Go to the top of the page
+Quote Post
nikestylex7
post 15.09.2015, 15:50:36
Post #3





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Słuszne przerobienie foreach aby obsługiwało 2 zmienne lecz nie działa poprawnie gdyż nawet skrypt mi nie ładuje dalej strony tylko przerywa działanie. Prawdopodobnie błąd wynika z właśnie foreach gdyż gdy miałem
  1. ($value->rocznekoszty) as $rocznekoszty
to wszystko wczytywało stronę.

  1. <?php $i = 1;
  2. foreach ($value as $v) {
  3. $rocznekoszty = unserialize($v->rocznekoszty);
  4. $cena = unserialize($v->cena);
  5.  
  6. echo '<tr id="wiersz-'.$i.'">
  7. <td align="center" width="5%" height="5%">'.$i.'</td>
  8. <td width="45%" height="5%"><input type="text" size="33" value="'.$rocznekoszty.'"/></td>
  9. <td width="5%" height="5%"><input class="ctype_digit_dot" type="text" size="6" value="'.$cena.'"/></td>
  10. <td align="center" width="2%" height="5%">zł</td>
  11. </tr>';
  12. ++$i;
  13.  
  14. ?>
Go to the top of the page
+Quote Post
KsaR
post 15.09.2015, 15:55:06
Post #4





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


To jeszcze mozna 2 rzeczy pokombinowac.
  1. foreach ($value as $k=>$v) # z kluczem.
  2. {
  3. var_dump ($k.' '.$v);
  4. break; # przerwanie petli do testów.
  5. }

--
Ps. Testujesz z wlaczonym wyswietlaniem bledow? tongue.gif
  1. ini_set('display_errors',1);

EDIT > PS. Pokaż co var_dump(); pokazuje w w.w. kodzie.

Ten post edytował KsaR 15.09.2015, 16:03:19


--------------------
Go to the top of the page
+Quote Post
nikestylex7
post 15.09.2015, 16:15:39
Post #5





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Właśnie kombinuje z kluczami lecz dalej lipa. Tak mam włączone wyświetlanie błędów lecz nic nie pokazuje.

  1. <?php $i = 1;
  2. foreach ($value as $key => $value1) {
  3. var_dump($value1);
  4. $rocznekoszty = unserialize($value1->rocznekoszty);
  5. $cena = unserialize($value1->cena);
  6.  
  7. echo '<tr id="wiersz-'.$i.'">
  8. <td align="center" width="5%" height="5%">'.$i.'</td>
  9. <td width="45%" height="5%"><input type="text" size="33" value="'.$rocznekoszty.'"/></td>
  10. <td width="5%" height="5%"><input class="ctype_digit_dot" type="text" size="6" value="'.$cena.'"/></td>
  11. <td align="center" width="2%" height="5%">zł</td>
  12. </tr>';
  13. ++$i;
  14.  
  15. ?>


zwróciło
  1. string(5) "id 55" string(10) "user_id 16" string(8) "status 1" string(24) "data 2015-09-10 14:21:19" string(10) "marka 2510" string(10) "model 2523" string(11) "wersja 2524" string(11) "silnik 2525" string(13) "kodsilnika ee" string(13) "typ Hatchback" string(17) "rokprodukcji 2012" string(18) "posiadaszgo 2 lata" string(15) "przebieg 150000" string(19) "rodzajpaliwa etanol" string(33) "skrzynia półautomat/sekwencyjna" string(15) "liczbadrzwi 4/5" string(16) "spalaniemiasto 8" string(15) "spalanietrasa 8" string(18) "spalaniemieszany 8" string(15) "ocenasilnik 3.5" string(29) "ocenasilnikwpis erftghjhaedsf" string(17) "ocenaskrzynia 3.3" string(29) "ocenaskrzyniawpis fdgdgdfgdfg" string(17) "ocenanadwozie 2.6" string(30) "ocenanadwoziewpis fdgdfgdfgdfg" string(17) "ocenapodwozie 4.4" string(26) "ocenapodwoziewpis fdgdfgdf" string(16) "ocenawnetrze 4.7" string(25) "ocenawnetrzewpis fdgfdgdg" string(18) "ocenaelektryka 4.5" string(27) "ocenaelektrykawpis fdgdfgdg" string(21) "ocenainneelementy 3.5" string(32) "ocenainneelementywpis dfgdgdfgdg" string(22) "radysugestie dfgdfgfdg" string(113) "rocznekoszty a:5:{i:0;s:7:"fdgdgdg";i:1;s:9:"asdasdasd";i:2;s:8:"asdasdas";i:4;s:9:"sadsadsad";i:5;s:6:"ASsaAS";}" string(93) "cena a:5:{i:0;s:4:"1.22";i:1;s:5:"12.22";i:2;s:5:"1.900";i:4;s:6:"12.000";i:5;s:7:"444.000";}" string(26) "autopasuje małej rodzinie" string(37) "wady a:1:{i:6;s:14:"wygodne fotele";}" string(28) "zalety a:1:{i:0;s:4:"Brak";}" string(13) "ocenaauta 3.8" string(28) "ocenaautawpis sfgsfgfsgdgdfg" string(13) "rating_like 0" string(16) "rating_dislike 0" string(10) "odslon 172"
Go to the top of the page
+Quote Post
ctom
post 15.09.2015, 17:24:49
Post #6





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

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


@nikestylex7 trochę chyba zamieszałeś - albo ja nie do końca Cię zrozumiałem wink.gif

jeżeli w tej "tabeli" chcesz mieśc tylko rocznekoszty => cena to kod z pierwszego posta był sensowniejszy

z małą modyfikacją (przy założeniu, że klucze nie mają znaczenia i kolejność "wpisów" w tablicach ($cena i koszty) są odpowiadające sobie ) :

  1. $count = 1;
  2. $cena = unserialize(stripslashes($value->cena));
  3. $koszty = unserialize($value->rocznekoszty);
  4. foreach ( $koszty as $rocznekoszty) {
  5.  
  6. echo '<tr id="wiersz-'.$count.'">
  7. <td align="center" width="5%" height="5%">'.$count.'</td>
  8. <td width="45%" height="5%"><input type="text" size="33" value="'.$rocznekoszty.'"/></td>
  9. <td width="5%" height="5%"><input class="ctype_digit_dot" type="text" size="6" value="'.current($cena).'"/></td>
  10. <td align="center" width="2%" height="5%">z?</td>
  11. </tr>';
  12. $count++;
  13. next($cena);
  14. }


Ten post edytował ctom 15.09.2015, 17:49:42


--------------------
Polecam MyDevil hosting idealny dla deweloperów
Go to the top of the page
+Quote Post
nikestylex7
post 15.09.2015, 17:37:42
Post #7





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Super działa ale trzeba przemyśleć next(cena), ponieważ gdy pętla robi się pierwszy raz to od razu podaje mu 2 element z tablicy zamiast 1 poza tym wszystko ok
Go to the top of the page
+Quote Post
ctom
post 15.09.2015, 17:50:40
Post #8





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

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


sorry wink.gif - poprawiłem w powyższym kodzie


--------------------
Polecam MyDevil hosting idealny dla deweloperów
Go to the top of the page
+Quote Post
nikestylex7
post 15.09.2015, 17:51:52
Post #9





Grupa: Zarejestrowani
Postów: 386
Pomógł: 7
Dołączył: 22.04.2010
Skąd: Ziemia

Ostrzeżenie: (20%)
X----


Dzięki wielkie dobrze się uczyć czegoś nowego.
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: 25.07.2025 - 01:06