Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Jak nie wykonywać pętli, gdy elementy są puste albo nie są tablicą
glencun
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 15.06.2011

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


Mam pytanie jak nie wykonywać takiej pętli:

  1. foreach($kor[0] as $n => $m) {


gdy elementy tej tablicy są puste albo nie są tablicą ?

Chodzi mi przede wszystkim o to, by nie wyświetlał się taki błąd:
Kod
Warning: Invalid argument supplied for foreach() in....



Dlatego myślę, że rozwiązaniem byłoby sprawdzanie czy te dane są tablicą, no chyba, że jest inne wyjście? Nie mam pomysłu..

Ten post edytował glencun 24.10.2011, 21:00:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
cycofiasz
post
Post #2





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


Jednak masz pomysł, czemu go nie zrealizujesz?
Go to the top of the page
+Quote Post
Smertius
post
Post #3





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


is_array

ewentualnie możesz zrzutować zmienną na tablice

Go to the top of the page
+Quote Post
Mackos
post
Post #4





Grupa: Zarejestrowani
Postów: 362
Pomógł: 44
Dołączył: 10.06.2009

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


ej no dajesz sobie prosty warunek:
  1. if(!empty($tablica)){
Go to the top of the page
+Quote Post
Smertius
post
Post #5





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


Mackos, i w takim wypadku.

  1. $a ='jestem sobie stringiem';
  2.  
  3. if(!empty($a)){
  4. foreach($a as $val){
  5. }
  6. }
  7.  


Dostaniemy takiego samego warninga jak w pierwotnej wersji
Go to the top of the page
+Quote Post
glencun
post
Post #6





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 15.06.2011

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


No to teraz już zupełnie nic nie wiem w takim razie... (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Smertius
post
Post #7





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


Najprościej,bez żadnego kombinowania dodaj ifa przed twoją zmienną gdzie dasz jako warunek is_array($twoja_zmienna).

W tym rozwiązaniu które podał kolega wyżej, sprawdza tylko czy zmienna nie jest pusta, a nie czy jest tablica która może być użyta w pętli.
Go to the top of the page
+Quote Post
Dominis
post
Post #8





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


sprawdz sobie najpierw czy zmienna istnieje(isset), a nastepnie czy jest tablica(is_array)

  1. if(isset($testArr) && is_array($testArr))
  2. echo 'Jestem tablica';
  3. else
  4. echo 'Nie istnieje, lub nie jestem tablica';
Go to the top of the page
+Quote Post
glencun
post
Post #9





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 15.06.2011

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


A nie powinno być || zamiast && ?
Go to the top of the page
+Quote Post
Dominis
post
Post #10





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


&& oznacza i
musi zmienna istniec I byc tablica
Go to the top of the page
+Quote Post
andrew8666
post
Post #11





Grupa: Zarejestrowani
Postów: 3
Pomógł: 1
Dołączył: 24.10.2011

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


Gdyby było "||", to wystarczy żeby jeden warunek był prawdziwy (tutaj praktycznie tylko isset), gdy jest "&&" to oba warunki muszą być prawdziwe.
Go to the top of the page
+Quote Post
cycofiasz
post
Post #12





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

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


  1. if(isset($testArr) && is_array($testArr) && !empty($testArr))
  2. {
  3. foreach...
  4. }


Najpierw sprawdza czy zmienna istnieje, później czy jest typu tablicowego a na końcu czy nie jest pusta.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.12.2025 - 21:55