Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]foreach w foreach
Forum PHP.pl > Forum > Przedszkole
qbas-s
może banalne pytanie ale dlaczego wykona się tylko wewnętrzna pętla?


  1.  
  2. foreach($result as $key => $value){
  3.  
  4. if($value->row === null){
  5. echo 'result';
  6. //trochę kodu
  7. }
  8.  
  9.  
  10. foreach($result2 as $key2 => $value2){
  11. if($value2->row !== null){
  12. echo 'result2';
  13. }
  14. }
  15.  
  16. if($value->row === null){
  17. // trochę kodu
  18. }
  19.  
  20. }
  21.  


zakładając, że obie tablice nie są puste, wyświetli się przynajmniej raz tylko 'result2'.
Zmienne:
$result === $result2


Może też napiszę po co mi to (może ktoś podsunie lepsze rozwiązanie bardziej optymalne).
Użytkownik na tablicy może dodawać sobie posty i każdy post można komentować. Pętla wyżej w moim kodzie ma za zadanie wyświetlać post macierzysty i potem ponownie przeszukiwać kopię tablicy w celu znalezienie subpostów postu macierzystego.

Struktura html takiej "paczki" wygląda mniej więcej tak:

  1. <div class="post">
  2. //tu kod postu macierzystego, dlatego sprawdzam sobie czy wartość jednego z indeksów tablicy jest null bo jeśli nie to oznacza, że jest to subpost - no i oczywiście trochę kodu tam jeszcze jest ale tu nie jest to istotne, chodzi o idee
  3.  
  4. //tu sprawdzam czy dany indeks w kopi tablicy jest różny od null jeśli tak to oznacza że to subpost
  5. <div class="post subpost">
  6. //kodzik
  7. </div>
  8.  
  9. //tu ponownie sprawdzam czy null aby domknąć znaczniki html postu macierzystego
  10. </div>
adeptofvoltron
przedewszystkim to syntax za niedomknięcie okrąglego nawiasu w drugiej pętli
qbas-s
przeoczenie, poprawiłem i trochę dopisałem. W kodzie oczywiście dokładnie tak nie mam ale idea jest identyczna
Turson
Proponuję var_dump($value)
qbas-s
var_dump($value) pokaże tylko dane które wyświetli druga pętla. Kiedy usunę drugą pętle wtedy pierwsza wyświetla prawidłowo dane. Tak jakby druga niby niezależna pętla miała wpływ na działanie pierwszej.
snerf
Nie powinno być tak?:

  1. foreach($result as $key => $value){
  2.  
  3. if($value->row !== null){
  4. echo 'result';
  5. //trochę kodu
  6. }
  7.  
  8.  
  9. foreach($value as $key2 => $value2){
  10. if($value2->row === null){
  11. echo 'result2';
  12. }
  13. }
  14.  
  15. if($value->row !== null){
  16. // trochę kodu
  17. }
  18.  
  19. }



Trudno tak zobaczyć o co chodzi. Mógłbyś powiedzieć coś więcej ? pokazać tablicę?
qbas-s
nie.

przykładowa zawartość zmiennej $value (tablica dla postu macierzystego):
  1.  
  2. stdClass Object
  3. (
  4. [w_id] => 25
  5. [w_id_item] => 15
  6. [w_msg] => tempor incididunt ut labore et dolore magna aliqua
  7. [w_date] => 2014-06-10 15:48:22
  8. [w_dir] => msg/2014/06/10/
  9. [w_photo] => w58hkyuvs3teyyqruz9d
  10. [w_parent] => null
  11. [w_rate_plus] => 0
  12. [w_rate_minus] => 0
  13. [u_id] => 7
  14. [u_media_dir] => public/users/2014/05/11/
  15. [u_profil_photo] => profil_photo
  16. [u_name] => Jan Kowalski
  17. )


przykładowa zawartość zmiennej $value2 (tablica subpostu)
  1.  
  2. stdClass Object
  3. (
  4. [w_id] => 32
  5. [w_id_item] => 15
  6. [w_msg] => tempor incididunt ut labore et dolore magna aliqua
  7. [w_date] => 2014-06-10 15:48:22
  8. [w_dir] => msg/2014/06/10/
  9. [w_photo] => w58hkyuvs3teyyqruz9d
  10. [w_parent] => 25
  11. [w_rate_plus] => 0
  12. [w_rate_minus] => 0
  13. [u_id] => 7
  14. [u_media_dir] => public/users/2014/05/11/
  15. [u_profil_photo] => profil_photo
  16. [u_name] => Marta Kowalska
  17. )


index w_parent jeśli jest null wtedy wskazuje na post macierzysty. Jeśli jest różny od null wtedy oznacza, że tablica jest subpostem postu o w_id takim jak w_parent. Jednak wydaje mi się, że zagłębianie się aż tak w całą tą idee jest chyba nie istotne. Bo pytanie brzmi: dlaczego wewnętrzna pętla z pierwszego postu zaburza pracę tej pierwszej.
Damonsson
Przecież to nie jest ze sobą w ogóle powiązane, więc jak ma być zależne? Chyba sam się zakręciłeś w tym co chcesz zrobić. Skoro masz jakieś posty i subposty, to zrób sobie z tego tablicę wielowymiarową i leć po tym normalnie foreach, ale po JEDNEJ tablicy, a nie 2 zupełnie różnych.
qbas-s
właśnie ja też nie rozumiem dlaczego jedna pętla ma wpływ na drugą skoro operują na dwóch innych tablicach. Mógłbym to zrobić inaczej ale to więcej kombinowania wtedy a chciałem to załatwić za pomocą jednego zapytania sql z join'ami i max dwiema pętlami foreach



EDIT:

znalazłem rozwiązanie, operowałem na obiekcie a obiekty w php przekazywane są przez referencje i tu pies pogrzebany. Operowanie na tablicy obiektu załatwiło sprawę.
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.