![]() |
![]() |
![]()
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:
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 151 Pomógł: 36 Dołączył: 1.02.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Jesteś pewien, że masz 3 rekordy, a nie 9 ?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Pętla foreach ma to do siebie, że iteruje po całej tablicy bez żadnych ograniczeń,natomiast Ty ustawiasz wartość zmiennej $j już poza nią. To co robi teraz ten kod, to trzykrotny foreach po całej tablicy. Jeśli chciałbyś wyciągnąć co trzeci rekord to należałoby zrobić małą modyfikację związaną z wykorzystaniem reszty z dzielenia (sprawdzasz czy modulo % 3 z $j == 0) i wszystko w jednym foreachu.
|
|
|
![]()
Post
#4
|
|
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:
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 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Dodaj dla porządku odpowiednie nawiasy klamrowe do instrukcji warunkowych if i sprawdź efekt.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Niestety nic się nie zmieniło. Poszczególne pola <input.. /> nadal przyjmują wartości value="" od 1 do 23 (tyle jest rekordów).
Efekt: Pożądany efekt: //ignore na pola checkbox - je wiem jak obsłużyć (IMG:style_emoticons/default/smile.gif) Nadal nie udało mi się uporać z tym problemem - jakieś pomysły? ;/ Ten post edytował jurcio6 14.02.2011, 12:53:54 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 56 Dołączył: 3.06.2010 Skąd: Tarnowskie Góry Ostrzeżenie: (0%) ![]() ![]() |
Wykonałem ten twój kod i działa poprawnie. Jesteś pewien, że u ciebie wykonuje się dokładnie to co wkleiłeś?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dla pewności wykonałem kod jeszcze raz i niestety jest to, co było, czyli value w inputach przyjmują wartości od 1 do 23, a nie tak, jak chcę. Naprawdę nie wiem czemu.
Pracuję na wamp server, PHP 5.3.0 - może przez średnio aktualną wersję? Choć szczerze mówiąc teraz nie jest najlepszy czas na zmiany oprogramowania - muszę szybko skończyć ten projekt. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 11.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
I ten pierwszy, najprostszy przykład też Ci nie działa? A mógłbyś dla tego uproszczonego przykładu zrobić print_r testowej tablicy jaką tam podajesz?
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 55 Pomógł: 0 Dołączył: 28.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat 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? Jak się pisze bzdury to się ma problemy. Proponuje na poczatek zapoznać się z podstawami działania pętli. Poczatkowy fragment skryptu robi dokładnie to co powinien robić - bo tak napisałeś. To samo dotyczy tablic wielowymiarowych. By uzyskac efekt 1,2,3 trzeba to napisać - chocby tak:
|
|
|
![]()
Post
#12
|
|
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:
Ten post edytował jurcio6 19.02.2011, 10:59:52 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 22:12 |