Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dziwny zachowanie warunku if
Forum PHP.pl > Forum > Przedszkole
parzygnat
Pisząc prosty programik natknąłem się na dziwny problem:
W miejscu gdzie $klucz4 == 'ilosc' jeżeli $klucz4 ma wartosc 0 to warunek będzie spełniony, w pozostałych przypadkach funkcja if działa tak jakbym chciał.

  1. <?php
  2. if($_SESSION[$klucz1][$klucz2]['rodzaj'] == 'wysokosc'){
  3. $y_wew = '20';
  4. foreach($wartosc2 as $klucz3 => $wartosc3){
  5. if(is_array($wartosc3) ){
  6. foreach($wartosc3 as $klucz4 => $wartosc4){
  7. if($klucz4 == 'ilosc'){
  8. print "<div id=\"ilosc\" style=\"position:absolute; left:345px; top:{$y_wew}px; width:85px; height:20px; z-index:1\" class=\"warstwa_koszyk\">";
  9. print "$wartosc4";
  10. print "</div>";
  11. $y_wew += '20';
  12. }
  13. }
  14. }
  15. }
  16. }
  17. ?>

Czy ktoś potrafi to wyjaśnić??
Kicok
Następuje niejawna konwersja z typu string ('ilosc') na typ int (0)

Poczytaj o różnicy między == a ===
parzygnat
Dzieki za pomoc. O tym to juz czytałem ale dlaczego jak jest $klucz4 ma wartosc 1 to działa(warunek nie spełniony) jak ma wartość 'ilosc' to tez działa(warunek spełniony)
Wodzu
Cytat(parzygnat @ 31.05.2008, 12:09:40 ) *
W miejscu gdzie $klucz4 == 'ilosc' jeżeli $klucz4 ma wartosc 0 to warunek będzie spełniony, w pozostałych przypadkach funkcja if działa tak jakbym chciał.
  1. <?php
  2. if($klucz4 == 'ilosc') ...
  3. ?>

Jeżeli $klucz4 ma wartość 0 (int - liczba naturalna), wtedy PHP myśli, że porównujemy liczby. I wówczas próbuje ze słowa 'ilosc' zrobić liczbę, a że nie występują na jego początku cyferki, uznaje, że ów string niejawnie skonwertowany podczas przypisania do liczby ma wartość 0. A 0==0 daje true smile.gif
parzygnat
Dzieki za wyjasnienie
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.