![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak w pętli foreach() mogę "przeskoczyć" o dwa przeloty w przód? Chodzi mi o coś takiego jak continue, tyle że wywołane dwa razy pod rzad.
Próbowałem mniej więcej tak:
Ale to nie działa... Ewentualnie ratuje mnie zmiana konkretnej wartości dla danego klucza podczas wykonywania pętli foreach (wtedy powyższa opcja jest mi niepotrzebna), ale to też wydaje mi się małowykonalne:
To, owszem, zamieni wartość w tablicy, ale po wykonaniu pętli. Ja muszę to zrobić w trakcie. Ma kotś jakiś pomysł? Ten post edytował Majkelo23 2.09.2014, 20:21:02 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Czemu nie pętla for z $i = 2 ?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Bo to nie jest regularny przeskok o dwa pola w przód. To będzie się działo powiedzmy przy 3 wywołaniu i 14 (liczby podane losowo). Nie wiem tego, w którym momencie zajdzie potrzeba przeskoczenia w pętli o te dwa rekordy, wychodzi to wewnątrz pętli.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 321 Pomógł: 55 Dołączył: 19.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
kod na szybko więc przerób na swoje potrzeby
-------------------- Polecam MyDevil hosting idealny dla deweloperów
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 105 Dołączył: 7.08.2012 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ewentualnie ratuje mnie zmiana konkretnej wartości dla danego klucza podczas wykonywania pętli foreach Zwróć uwagę na referencję & przed $value i jej usunięcie na końcu. Ten kod zmienia tablicę w locie, a nie działa na jej kopii. Pewnie ArrayIterator też to idzie zrobić z podwójnym ->next() Ten post edytował kreatiff 2.09.2014, 21:00:29 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Niestety kurczę, nie działa mi to @kreatiff.
Natomiast @ctom - ta opcja jednak mnie nie ratuje, aczkolwiek działa, przepraszam za wprowadzenie w błąd. Może pokażę kod i ktoś mi coś podsunie...
Problem jest w linii ~42. Jak widać, wszystkie warunki mają break, więc aktualizacja tablicy pomaga bo następny przelot bierze już pod uwagę fakt, że zmieniłem wartości w tablicy. Warunek w okolicy linii ~42 jednak nie jest kończony za pomocą break i tam jest problem. Chcę, aby gdy $available - $available wynosi 0, skrypt przeszedł do następnego rekordu. Jednak po przejściu do następnego rekordu, skrypt się zapętla po prostu i stoję w miejscu przez wszystkie przeloty pętli... Tutaj jest wynik tego kodu powyższego: Cytat array(5) { [0]=> array(1) { ["spear"]=> float(12) } [1]=> array(1) { ["spear"]=> float(12) } [2]=> array(3) { ["spear"]=> float(7) ["sword"]=> string(1) "7" ["axe"]=> float(30) } [3]=> array(3) { ["spear"]=> float(7) ["sword"]=> string(1) "7" ["axe"]=> float(30) } [4]=> array(3) { ["spear"]=> float(7) ["sword"]=> string(1) "7" ["axe"]=> float(2) } } Jak widać 2 tablica przyjęła jakieś tam wartości i reszta się powtarza bo linia ~42 nie potrafi zatrybić, że tam jest po prostu 0, dla niej co przelot ta wartość wynosi 7 i skrypt stoi w miejscu zamiast gnać dalej. Nie mam pomysłu już jak to zrobić. @UP Twoja propozycja mi nie działa, gdyby działała to przypuszczalnie by to poszło bo wtedy daję znać do skryptu, że ta wartość nie wynosi 7, tylko 0 i wtedy ten warunek z linii 31 zrobi swoje dalej. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 87 Pomógł: 3 Dołączył: 15.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- "Zło do triumfu potrzebuje tylko tego, aby dobrzy ludzie nic nie robili" |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.05.2025 - 11:00 |