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%)
-----


Pętla działa w porządku - tzn. zgodnie z moim zamierzeniem. Wykorzystuję ją przy ankietach i służy ona konkretnie do wypisania wszystkich odpowiedzi do danego pytania - po pytaniach iteruje for, po odpowiedziach foreach - tu wszystko z pewnością jest dobrze. Wyciąłem to po prostu z kontekstu i dlatego wygląda to tak, jakby iterowała 3 razy po tym samym - w rzeczywistości przy każdej iteracji zmienia się argument $answers.

Problem jest taki, że chciałem nazywać odpowiedzi dla każdego pytania 1, 2, 3, 4.. , a tutaj nie resetuje się ten index $j i mi to uniemożliwia. Konkretnie chodzi o atrybuty value dla inputów. Nie chcę korzystać z $row['question_id'], który jest wyciągany z bazy i po czasie może przyjmować dosyć wysokie wartości. Cały kod wygląda mniej więcej tak:
  1. echo "<table align=\"center\">";
  2. for($i=0; $i<$nq; $i++)
  3. {
  4. echo "\n<tr><td style=\"padding: 15px 0px 5px 0px;\"><b>Pytanie ";
  5. echo $i+1 .": <i>".$questions[$i]['question_text']."</i></b>";
  6. if($questions[$i]['multiple_choice']==1)
  7. echo " [wybór wielokrotny]";
  8. echo "</td></tr>\n<tr><td style=\"padding-left: 30px;\">";
  9. $j = 1;
  10. foreach($answers as $row)
  11. {
  12. if($questions[$i]['question_id'] == $row['question_id'])
  13. if($questions[$i]['multiple_choice']==1)
  14. echo "\n<label name=\"".$row['question_id']."\"><input type=\"checkbox\" name=\"question_".$i."[]\" value=\"".$j."\" />".$row['answer_text']."</label><br />";
  15. else
  16. echo "\n<label name=\"".$row['question_id']."\"><input type=\"radio\" name=\"question_".$i."\" value=\"".$j."\" />".$row['answer_text']."</label><br />";
  17. $j++;
  18. }
  19. echo "</td></tr>";
  20. }
  21. echo "\n</table>";

Wersja mocno robocza (IMG:style_emoticons/default/smile.gif)

//edit: oczywiście chodzi o wartości value dla inputów, a nie o name.

Ten post edytował jurcio6 14.02.2011, 12:23:28
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 16.10.2025 - 06:39