2012-04-05 13 views
-4

ich habe eine Aussage in meinem php:php variable Gleichheitsvergleich kurze Weg

<? if(isset($_GET['mod']) && ($_GET['mod'] == "category" || $_GET['mod'] == "catalog")) echo 'id="active"'; ?> 

ich lernen möchte, wie diese Typen von Doppel Vergleich im zweiten Teil zu schreiben (nach & &) wie folgt aus:

<? if(isset($_GET['mod']) && $_GET['mod'] == ("category" || "catalog")) echo 'id="active"';?> 

aber es funktioniert nicht.

gibt es viele hübsche if-Einzeiler in PHP, die ich oft in meiner Web-Site verwenden, und ich frage mich, ein um mehr zu erfahren))

+4

Bitte verwenden Sie keine kurzen PHP-Tags. – PeeHaa

Antwort

3

Sie können es tun:

if(isset($_GET['mod']) && in_array($_GET['mod'], array("category", "catalog")) 

Als @RepWhoringPeeHaa, schlug short-Tags nicht mehr verwenden, da einige der Server nicht, sie unterstützen könnten.

auch, wie unten vorgeschlagen, sollten Sie versuchen, den PHP-Code außerhalb des HTML zu trennen, etwa so:

<?php 

    $active = ''; 

    $mods = array("category", "catalog"); 
    if (isset($_GET['mod']) && in_array($_GET['mod'], $mods)){ 
     $active = 'id="active"'; 
    } 

?> 

// html 
<div <?php echo $active; ?>></div> 
+0

danke, es ist ein wenig kürzer. Ja kurze Tags sind schlecht, wird die Verwendung von ihnen reduzieren. Vielen Dank ! – remort

+0

--- Das funktioniert für mich, danke – remort

+0

Bitte lesen Sie meine Bearbeitung oben – scibuff

2
<?php 
if(isset($_GET['mod']) && in_array($_GET['mod'], array("category", "catalog"))) { 
    echo 'id="active"'; 
} 
0

Der zweite comprasion Typ nicht funktionieren sollte, weil die Syntax falsch. Sie können zwei Objekte nicht anhängen und sie dann mit einem anderen Objekt in der if-Anweisung vergleichen.

1

Erstens: stutzen php-Tags. Verwenden Sie: <?php. Weil, wenn Sie die kurze Syntax verwenden, Sie davon abhängig sind, dass einige Servereinstellungen aktiviert sind (was eine schlechte Sache ist).

Wenn Sie Ihren Code besser lesbar machen und wartbar Sie so etwas wie tun könnten:

<?php 

$values = array('category', 
       'catalog', 
       ); 

if(isset($_GET['mod']) && in_array($_GET['mod'], $values)) { 
    echo 'id="active"'; 
} 

diese Weise ist es es viel besser lesbar und viel besser wartbar. Wenn Sie nach einem anderen Wert suchen möchten, müssen Sie nur ein Element zum Array hinzufügen und es wird weiter funktionieren.

Denken Sie daran, dass es nicht den kürzesten Code schreibt, der wichtig ist. Es ist der beste wartbare Code, der zählt.

+0

Dies ist völlig unerwünscht für kurze, Inline-PHP-Logik in HTML-Vorlagen. Ich brauche kurze, einzeilige Einfügung von PHP-Code direkt in eine HTML-Vorlage, damit es genau aussieht. aber danke für in_array())) – remort

+0

Nein ist es nicht. Wie gesagt, du solltest nicht alles in eine kurze Linie bringen. Das saugt anderen Leuten (und auch dir selbst), den Code zu behalten und zu sehen, was vor sich geht. – PeeHaa

+1

was Sie tun möchten, ist Logik außerhalb der HTML-Vorlage insgesamt zu halten, z.B. tun '$ active = 'id =" active "';' außerhalb des HTML-Codes und dann einfach 'echo $ active; 'an Ort und Stelle ... auf diese Weise halten Sie sowohl PHP und HTML-Readale – scibuff

-2

können Sie Array verwenden oder wenn Sie nicht wollen, müssen Sie es tun:

if(isset($_GET['mod']) AND (($_GET['mod'] == "category") OR ($_GET['mod'] == "catalog"))) echo 'id="active"'; 
+2

Sagst du mir, dass du 'AND' und' OR' wirklich benutzt? – PeeHaa

+0

es gibt viele Möglichkeiten, dies zu tun, es ist eine Möglichkeit und Sie wissen, und für den besseren Fall, wenn Sie wollen, dass Ihre Code-Struktur lesbar und gut ist, müssen Sie UND, ODER statt &&, || verwenden – ermya

0

PHP 5.4 unterstützt Short-Tags standardmäßig unabhängig von der ini-Konfiguration.

Wenn dieser Code wahrscheinlich nicht auf andere Server verteilt wird, ist es sicher, kurze Tags zu verwenden. Wenn Sie jedoch einen Server wechseln, der keine kurzen Tags unterstützt, werden Sie Probleme bekommen.