Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]foreach i podwójne unserialize
Forum PHP.pl > Forum > Przedszkole
nikestylex7
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. ?>

KsaR
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.
nikestylex7
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. ?>
KsaR
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.
nikestylex7
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"
ctom
@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. }
nikestylex7
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
ctom
sorry wink.gif - poprawiłem w powyższym kodzie
nikestylex7
Dzięki wielkie dobrze się uczyć czegoś nowego.
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.