Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]foreach w foreach
qbas-s
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

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


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>


Ten post edytował qbas-s 10.06.2014, 21:39:55
Go to the top of the page
+Quote Post
adeptofvoltron
post
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 2
Dołączył: 4.09.2013

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


przedewszystkim to syntax za niedomknięcie okrąglego nawiasu w drugiej pętli
Go to the top of the page
+Quote Post
qbas-s
post
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

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


przeoczenie, poprawiłem i trochę dopisałem. W kodzie oczywiście dokładnie tak nie mam ale idea jest identyczna

Ten post edytował qbas-s 10.06.2014, 16:09:20
Go to the top of the page
+Quote Post
Turson
post
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Proponuję var_dump($value)
Go to the top of the page
+Quote Post
qbas-s
post
Post #5





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

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


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.
Go to the top of the page
+Quote Post
snerf
post
Post #6





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

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


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ę?
Go to the top of the page
+Quote Post
qbas-s
post
Post #7





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

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


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.

Ten post edytował qbas-s 10.06.2014, 21:42:50
Go to the top of the page
+Quote Post
Damonsson
post
Post #8





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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.
Go to the top of the page
+Quote Post
qbas-s
post
Post #9





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

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


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ę.

Ten post edytował qbas-s 11.06.2014, 11:58:03
Go to the top of the page
+Quote Post

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: 21.08.2025 - 23:32