PHP: if statement som borde funka. Vad har jag gjort fel?

Tråden skapades och har fått 3 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Boden
  • 2011-08-04 23:42
if("$thiscar[brand]" == $sok_marke || $sok_marke == 'alla' && "$thiscar[model]" == $sok_modell || $sok_modell == 'alla'){ 

echo($thiscar[brand] . $thiscar[model]);

}

Jag översätter detta till:
om thiscar[brand] är samma som $sok_marke eller "alla" och $thiscar[model] är samma som $sok_modell eller "alla" ska bilens märke och modell skrivas ut.

Det vill säga:
Om sok_marke är "Volvo" och sok_modell är "alla" ska alla Volvo i arrayen skrivas ut.
Om sok_marke är "Volvo" och sok_modell är "V70" ska alla Volvo V70 skrivas ut.

Resultatet blir dock helt fel. Märket tas fram, men inte modellen.

Har säkert gjort ett vanligt nybörjarmisstag, någon som ser vad jag gjort fel?

Tacksam för hjälp!

Problemet beror på i vilken ordning som PHP evaluerar &&- och ||-operatorer. Många programspråk prioriterar && över ||. Jag kan inget om PHP så jag fick kolla upp att detta även gällde för PHP. Effekten blir att &&-operatorn i mitten evalueras först, därefter evalueras den vänstra ||-operatorn tillsammans med det första resultatet och slutligen evalueras resultatet från det av den högra ||-operatorn. Du kan lösa problemet genom att lägga in parenteser som isolerar ||-operatorerna och gör att PHP evaluerar dem innan &&.

Om du inte får bukt på det. Dela upp if statements till "under if statements"…

if () {
if () {
}
}

Det finns ett talesätt som heter "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."

The Real Vikings tips är bra praxis, för du måste kunna förstå vad som händer även efter ett år, och just det där sättet att skriva blir väldigt svårt att dechiffrera.

För att inte tala hur svårt det är för någon utomstående! Så, om jag har förstått vad det är du vill uppnå så skulle jag kanske skriva det lite annorlunda, på ett mer läsbart sätt, som också blir lättare att felsöka

#!/usr/bin/php
<?php

// Användarvalen (nålarna)
$thiscar[brand] = "Volvo" ;
$thiscar[model] = "V70" ;

$sok_marke = "Volvo" ;
$sok_modell = "V70" ;



// Höstackarna som vi ska söka i
$brandArray = Array ($sok_marke, 'alla') ;
$modelArray = Array ($sok_modell, 'alla') ; 

// Finns nålarna i höstackarna
$brandMatch = in_array ( $thiscar[brand], $brandArray ) ;
$modelMatch = in_array ( $thiscar[model], $modelArray ) ; 

// Är samtliga villkor uppfyllda
$allConditions =  $brandMatch &&  $modelMatch ;



if(  $allConditions == true)
{ 
	echo($thiscar[brand] . $thiscar[model]);
}

?>
1
Bevaka tråden