2016-05-17 14 views
0

Der Versuch, den Wert von $ dy oder $ days zurückzugeben. Manchmal ist $ dy gesetzt, andere Zeiten sind gesetzt.ternäre Mehrfachbedingungen mit mehreren Werten

Zum Beispiel: $ dy [ 'value'] = 45 oder $ Tage [ 'value'] = 75

(nur ein Wert eingestellt wird)

Jedoch, wenn ich diese Anweisung ausführen ist der Wert immer gleich zu 1. Wie kann ich den tatsächlichen Wert von $ dy oder $ days zurückgeben.

$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] || $days['value']) : null; 

Antwort

1

über 1:

In PHP, || nicht tun, was Sie vielleicht aus Richtung JavaScript erwarten, denn das Ergebnis wird immer eine boolean sein. || konvertiert implizit seine Operanden in boolesche Werte und gibt das Ergebnis zurück.

Um das Äquivalent eines Kurzschlusses || von JavaScript in PHP zu bekommen, Sie ?: verwenden können (die so genannte "Elvis Operator" - x ?: y ist eine Abkürzung für x ? x : y):

$days = isset($dy['value']) || isset($days['value']) ? ($dy['value'] ?: $days['value']) : null; 

I didn Ändern Sie nicht die erste ||, weil es in der Tat eine boolesche Operation ist, aber ich habe die zweite ersetzt.


aber ich denke, es gibt eine Fehlerlogik ist sowieso in Ihrem Code, denn wenn man E_NOTICE Fehler haben die Berichterstattung über, wird PHP sowieso beschweren, wenn $days['value'] gesetzt und $dy['value'] ist nicht, weil Sie noch $dy['value'] Zugriff sind auch wenn isset($dy['value']) == false. So müssten Sie verwenden, zum Beispiel: (. Vorausgesetzt, dass Sie auch einen Wert überspringen wollen, wenn es falsy ist - je nachdem, wie Sie die || verwenden es wie es aussieht)

$days = (isset($dy['value']) ? $dy['value'] : null) ?: (isset($days['value']) ? $days['value'] : null); 

Wenn Sie nicht über Bekanntmachung Fehler kümmern haupt (! entmutigt) konnte man nur verwenden:

$days = $dy['value'] ?: $days['value'] ?: null; 
+0

CherryDT du rockst! Eine der besten detaillierten Antworten noch ... – no1uknow

+0

Thx! Erklärung, was dieser Operator tatsächlich ist. – CherryDT

0

einen besonderen Grund Sie ein ternäres benötigen? In diesem Fall wäre ein if-elseif wahrscheinlich sauberer und leichter zu lesen.

if (isset($dy['value'])) 
{ 
    $days = $dy['value']; 
} elseif (isset($days['value']) 
{ 
    $days = $days['value']; 
} 

Wenn es unbedingt ein ternäres sein müssen, müssen Sie eine ternäre innerhalb eines ternären:

$days = isset($dy['value']) ? $dy['value'] : (
      isset($days['value']) ? $days['value'] : null 
     ); 

Wenn Sie PHP verwenden 5.3+ (was man sein sollte) dies sollte funktionieren:

$days = $dy['value'] ?: ($days['value'] ?: null); 
0

ich denke, Dies könnte das sein, was man wollte:

$days = (isset($dy['value']) || isset($days['value'])) ? (isset($dy['value'])?$dy['value'] : $days['value'])) : null;