Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pętla foreach zagnieżdżona w for - problem z indeksami
jurcio6
post
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 4.11.2010

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


Witam.

Mam pewien problem z indeksami. Kod:

  1. //$answers to dwuwymiarowa tablica rekordów pobranych z bazy - załóżmy, że tych rekordów ma tam 3
  2. for($i=0; $i<3; $i++)
  3. {
  4. //jakiś kod do wykonania
  5. $j = 1;
  6. foreach($answers as $row)
  7. {
  8. //jakiś kod do wykonania - $row coś tam - wiadomo, ale problem poniżej:
  9. echo $j.", ";
  10. $j++;
  11. }
  12. }


I teraz problem mam następujący: wynikiem takiej pętli jest: "1, 2, 3, 4, 5, 6, 7, 8, 9" - jakim cudem, skoro przy każdej iteracji pętli zewnętrznej for ustawiam licznik $j =1? Czy wynikiem nie powinno być "1, 2, 3, 1, 2, 3, 1, 2, 3"? Jak uzyskać taki efekt?

Proszę o pomoc! Z góry dzięki.

Ten post edytował jurcio6 14.02.2011, 11:59:29
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jurcio6
post
Post #2





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 4.11.2010

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


Siadłem ze świeżym umysłem i od razu znalazłem błąd - na który nikt w tym topicu nie wpadł...

Donpablo - być może wiesz dużo, ale nie wpadłeś na najprostsze rozwiązanie. Może i nie znam na tyle dobrze mechanizmów PHP, ale jeśli bym znał, to bym nie potrzebował pomocy na tym forum ani gdziekolwiek indziej. W każdym razie w tym wypadku nie tu leżał problem... pętle działały tak, jak było to przez mnie zamierzone - jedyną rzeczą, którą zrobiłem źle, to inkrementacja $j - powinna ona być tylko wtedy, gdy warunek jest spełniony (czyli gdy znajdę odpowiednie pole), a było zrobione tak, że wykonuje się zawsze (niezależnie od spełnienia warunku). Dodatkowo zmieniłem pętle for na foreach - dla własnej wygody. Dzięki wszystkim za chęci (IMG:style_emoticons/default/smile.gif)

Rozwiązanie:
  1. foreach($questions as $q_row)
  2. {
  3. echo "\n<tr><td style=\"padding: 15px 0px 5px 0px;\"><b>Pytanie ";
  4. echo $i+1 .": <i>".$q_row['question_text']."</i></b>";
  5. if($q_row[$i]['multiple_choice']==1)
  6. {
  7. echo " [wybór wielokrotny]";
  8. }
  9. echo "</td></tr>\n<tr><td style=\"padding-left: 30px;\">";
  10. $j = 0;
  11. foreach($answers as $a_row)
  12. {
  13. if($q_row['question_id'] == $a_row['question_id'])
  14. {
  15. if($q_row['multiple_choice']==1)
  16. {
  17. ++$j; //PROBLEM ROZWIĄZANY
  18. echo "\n<label name=\"".$a_row['question_id']."\"><input type=\"checkbox\" name=\"question_".$i."[]\" value=\"".$j."\" />".$a_row['answer_text']."</label><br />";
  19. }
  20. else
  21. {
  22. ++$j; //PROBLEM ROZWIĄZANY
  23. echo "\n<label name=\"".$a_row['question_id']."\"><input type=\"radio\" name=\"question_".$i."\" value=\"".$j."\" />".$a_row['answer_text']."</label><br />";
  24. }
  25. }
  26. }
  27. echo "</td></tr>";
  28. }
  29. echo "\n</table>";
  30.  


Ten post edytował jurcio6 19.02.2011, 10:59:52
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 20:50