Avatar billede coffeepower Nybegynder
21. november 2003 - 10:50 Der er 9 kommentarer og
1 løsning

logisk operator - burde være simpelt

Hej eksperter,

jeg har et banalt problem jeg kæmper med. Jeg kan ikke få den logiske "or" operator til at fungere:

<?php

$myvar = 4;

if ($myvar == 1 || 2 || 3 ) {
    echo("myvar er 1,2 eller 3");
}else {
    echo("myvar er ikke 1,2 eller 3");
}

?>

Hvorfor er første betingelse altid sand? det burde det jo ikke være når variablen er 4 eller mere...

tak for svar
Avatar billede exp Juniormester
21. november 2003 - 10:52 #1
ved ikke om dette virker:

if ($myvar == [1|2|3] ) {

ellers bare brug:

if ($myvar == 1 || $myvar == 2 || $myvar == 3 ) {
Avatar billede coffeepower Nybegynder
21. november 2003 - 10:54 #2
Jeg kan godt få det til at virke sådan her:

<?php

$myvar = 0;

if (($myvar == 1) ||($myvar == 2) ||($myvar == 3)) {
    echo("myvar er 1,2 eller 3");
}else {
    echo("myvar er ikke 1,2 eller 3");
}

?>

men det må da være en smartere metode...
Avatar billede coffeepower Nybegynder
21. november 2003 - 10:58 #3
hej exp,

nej dette her:

if ($myvar == [1|2|3] ) {

virker ikke...

andre forslag?
Avatar billede erikjacobsen Ekspert
21. november 2003 - 11:10 #4
Sådan?

  $a = Array(1,2,3);


  $v=4;
  if (in_array($v,$a)) {
    print "Den er der!\n";
  } else {
    print "Nej, den er væk\n";
  }
Avatar billede coffeepower Nybegynder
21. november 2003 - 11:33 #5
Hej Erik,

tjae...det ser ganske smart ud, jeg havde ikke tænkt på at smide dem i et array, men omvendt så anvender du jo ikke || operatoren? Jeg er tilbøjelig itl at give dig points, men jeg skal lige først høre om der ikke er en smartere måde end den som exp har givet ovenfor, hvis man absolut VIL anvende || ?

/coffee
Avatar billede jakoba Nybegynder
21. november 2003 - 13:06 #6
if (($myvar == 1) ||($myvar == 2) ||($myvar == 3)) {

er den 'smarteste' og har yderligere den fordel at den virker i noget nær alle sprog, selv menneskesprog. du behøver ikke at huske den som en speciel php syntax der ikke virker i fx Java.

nogengange kan du gøre det kortere ved at tænke dig om, men det er ofte risikabelt. Her kunne det fx være fristende at sige:

if ( !( ($myvar < 1) ||($myvar > 3) ) ) {

Det ville være helt fint i Java og Pascal hvor man siger "dette er et heltal" samtidig med at man opretter sin variabel; men det er risikabelt i php hvor vi aldig kan vide om $myvar måske er en float med værdien 1.5 næste gang programmet kører.

mvh JakobA
Avatar billede coffeepower Nybegynder
21. november 2003 - 13:57 #7
Tak til alle for gode inputs...

især jakoba - pointene går til dig...men jeg ved ikke rigtig hvordan jeg tildeler dem når du har postet som kommentar
/C.
Avatar billede jakoba Nybegynder
21. november 2003 - 14:29 #8
takker
Avatar billede danino Nybegynder
22. november 2003 - 17:23 #9
if ($myvar == 1 || 2 || 3 ) {
    echo("myvar er 1,2 eller 3");
}else {
    echo("myvar er ikke 1,2 eller 3");
}

?>

Hvorfor er første betingelse altid sand? det burde det jo ikke være når variablen er 4 eller mere...

Grunden til det er, at du bare en af de ting du skriver i din if-sætning skal være sand, så er if'en sand, og nu er det sådan at alle tal, som ikke er 0, er sande. Da du tjekker om 2 eller 3 er sande (og det vil de altid være) vil din ifsætning altid blive opfyldt...

Ok, den var kringlet... Håber der var nogen der forstod bare lidt :-)
Avatar billede jakoba Nybegynder
30. november 2003 - 14:22 #10
fordi operatoren || har 'lavere prioritet' end operatoren ==

prioriteten bestemmer i hvilken rækkefølge vi gør ting of du h´kender sandsynligvis allerede princippet:
    2 * 2 + 4
akal udregnes som
    ( 2 * 2 ) + 4    // giver  4 + 4    giver  8
og ikke som
    2 * ( 2 + 4 )    // giver  2 * 6    giver  12

fordi multiplikation * har højere prioritet end addition +

så ($myvar == 1 || 2 || 3 ) svarer til:
    ( ($myvar == 1) || (2) || (3) )

  $myvar == 1      er et 'regnestykke' der enten giver true eller false
  2                er et 'regnestykke' der giver 2
  3                er et 'regnestykke' der giver 3

  ($myvar == 1) || (2)  er et regnestykke der giver true hvis en af operanderne giver true.

  og siden php 'hjælper' med at ændre værdier fra een type til en anden når der er brug for det vil (2) altid blive set som true (tal der ikke er nul), og så bliver slutresultatet til true.

mvh JakobA
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester