Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] sprawdzenie if'em w foreach
Forum PHP.pl > Forum > Przedszkole
kombox
Witam mam pewien problem chce sprawdzić czy jest wartość w tablicy jeśli nie to info mam taki kod

  1. <?php foreach($this->filtr as $a => $b):?>
  2.  
  3. <?php if(isset($b)) :?>
  4. "Nic nie wybrałeś"
  5. <?php else: ?>
  6. <?php print_r($a); ?>
  7. <?php endif;?>
  8.  
  9. <?php endforeach ;?>
  10.  
  11.  

i wszystko jest ok ale to "Nic nie wybrałeś wyświetla mi 8x czyli tyle ile mam w tablicy rekordów sad.gif
jak to zrobić żeby info było 1x
darko
Może tak:
  1. <?php
  2. foreach($this->filtr as $a => $b):
  3. if(isset($b)) :?>
  4. "Nic nie wybrałeś"
  5. <?php
  6. break;
  7. else:
  8. print_r($a);
  9. endif;
  10. endforeach ;?>
luck
Użyj
  1. break;

Edit: sorki za dubel, kolega był szybszy winksmiley.jpg
kombox
ohh tam jest bug miało być
  1.  
  2. <?php if(!isset($b)) :?>


no bo jesli nie istnieje wartość to powinny sie wyświetlić ze nic nie wybrałem

PS w tablicy to wygląd mniej więcej tak Dom => niebieski ,no ale to chyba jasne biggrin.gif

a zrobiłem var_dump'a zmiennej b no i dostaje
string(1) " "
mortus
Może o to chodzi:
  1. <?php
  2. $pustych_indexow = 0;
  3. foreach($this->filtr as $a => $b) :
  4. if(!isset($b)) :
  5. $pustych_indexow++;
  6. else :
  7. print_r($a);
  8. endif;
  9. endforeach;
  10. if($pustych_indexow > 0) :
  11. ?>
  12. W tablicy masz <?php echo $pustych_indexow; ?> pustych index-ów!
  13. <?php
  14. endif;
  15. ?>
Warunek z linii 4 powinien być chyba jednak inny: if($b == null), bo isset zawsze zwróci true.
kombox
OK zrobiłem tak

  1. <?php foreach($this->filtr as $a => $b):?>
  2. <?php $c =trim($b); ?>
  3.  
  4. <?php if(empty($c)) :?>
  5. 0000
  6. <?php break; else: ?>
  7. 1111
  8. <?php endif;?>
  9. <?php endforeach ;?>

i działa w 50% ponieważ kiedy bedzie NULL to "00000" ale kiedy będzie zmienna $b($c) to 1111 + te 0000
mortus
W sumie to nie wiem, o co Ci chodzi. Możesz jeszcze spróbować tak:
  1. <?php
  2. foreach ($this->filtr as $a => $b):
  3. ?>
  4. <?php if (!isset($this->filtr[$a])): ?>
  5. 0000
  6. <?php break; else : ?>
  7. 1111
  8. <?php endif; ?>
  9. <?php endforeach; ?>
Pozdrawiam i powodzenia
raak07
Hej
array_filter, array_key_exists może pomogą
pozdrawiam
kombox
chodzi mi o to ze jesli $c jest NULL to 0000 ale kiedy true to 1111 + te 0000 no a przecież tych zer nie powinno byc jak jest true

  1. <?php foreach($this->filtr as $a => $b):?>
  2. <?php $c =trim($b); ?>
  3.  
  4. <?php if(empty($c)) :?>
  5. 0000
  6. <?php break; else:?>
  7. 111
  8. <?php endif;?>
  9. <?php endforeach ;?>

$c nie jest empty to powinno pokazać mi "111" a pokazuje "111 0000" dlaczego tak się dzieje questionmark.gif?
mortus
Przykład
  1. <?php
  2. $array = array(0 => 'wartość 1', 1 => 'wartość 2', 3 => 'wartość 3', 4 => null, 5 => 'wartość 5');
  3. foreach($array as $key => $value) {
  4. if(!isset($array[$key]) {
  5. echo 'KONIEC';
  6. break;
  7. } else {
  8. echo '1<br/>';
  9. }
  10. }
Twój skrypt działa prawidłowo, czyli tak samo jak powyższy przykład. Chodzi o to, że po tablic $array poruszamy się do momentu, gdy napotkamy pustą wartość. Kiedy to się stanie przerywamy działanie pętli foreach, ale do tego czasu w każdej iteracji wyświetlamy 1<br/>. Powyższy przykład wyświetli:
Kod
1
1
1
KONIEC
Ponieważ dopiero czwarty element tablicy nie ma żadnej wartości. U Ciebie jest tak samo z tą różnicą, że już drugi element tablicy $this->filtr nie ma żadnej wartości. W poprzednich postach przedstawiłem Ci rozwiązanie, które łatwo zmodyfikować i przystosować do Twoich konkretnych potrzeb. Wystarczy pomyśleć.
raak07
Hej
..."Instrukcja empty sprawdza czy zmienna jest pusta. Zwróci true jeżeli zmienna w ogóle nie istnieje lub posiada wartość 0, '' lub false."
..."Instrukcja isset zwraca true jeżeli zmienna podana w parametrze istnieje. Nieważne jest, czy posiada wartość 0, '' czy false ? w takich przypadkach isset zwróci true."
To fragment artykułu zobacz
Mam nadzieję że to się przyda.
Pozdrawiam
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.