Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] sprawdzenie if'em w foreach
kombox
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 6.11.2008

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/sad.gif)
jak to zrobić żeby info było 1x
Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


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 ;?>
Go to the top of the page
+Quote Post
luck
post
Post #3





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

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


Użyj
  1. break;

Edit: sorki za dubel, kolega był szybszy (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował luck 11.04.2010, 17:06:00
Go to the top of the page
+Quote Post
kombox
post
Post #4





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 6.11.2008

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/biggrin.gif)

a zrobiłem var_dump'a zmiennej b no i dostaje
string(1) " "


Ten post edytował kombox 11.04.2010, 17:15:20
Go to the top of the page
+Quote Post
mortus
post
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.

Ten post edytował mortus 11.04.2010, 17:21:03
Go to the top of the page
+Quote Post
kombox
post
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 6.11.2008

Ostrzeżenie: (10%)
X----


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





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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
Go to the top of the page
+Quote Post
raak07
post
Post #8





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 10.09.2007

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


Hej
array_filter, array_key_exists może pomogą
pozdrawiam
Go to the top of the page
+Quote Post
kombox
post
Post #9





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 6.11.2008

Ostrzeżenie: (10%)
X----


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 (IMG:style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
mortus
post
Post #10





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 10.09.2007

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


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
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: 15.09.2025 - 16:08