php-syntax für die if-Anweisung mit mehreren Bedingungen ( `||` als auch als `&&` )

Kontext: Auf unserer website, berechnen wir, ob ein Element/Auftrag erfüllt die Kriterien für kostenlosen Versand mit einer if-Anweisung auswerten, wenn eine Wert - 'ff' - wahr ist. Je nach den Bedingungen erfüllt, legt die Versandkosten entsprechend. Wir benötigen nun die Notwendigkeit zu bewerten, wenn ein Artikel versandkostenfrei ist, mit der Bestellung von _. Um das ganze abzurunden, für andere Zwecke, z.B. externe feeds, eine andere Bedingung muss gelten (Gewicht = 0 oder kein Wert), für fw frei Fracht. Hier ist der code, dass ich kann nicht herausfinden, warum es NICHT funktioniert:

if($r['freeFreight'] == 'ff' || ($r['freeFreight'] == 'fw' && ($r['weight'] == 0 || $r['weight'] == '') ) ) {
    $r['shippingStandard'] = 0;
}

Sind die Bedingungen übermäßig getrennt in der if-Anweisung mit den Sätzen von ()? Oder sind Sie einfach nur falsch platziert. Zum Beispiel sollte es sein:

if(($r['freeFreight'] == 'ff') || ($r['freeFreight'] == 'fw' && $r['weight'] == 0 || $r['weight'] == '') ) {
    $r['shippingStandard'] = 0;                     
}

Den zweiten der beiden scheint mehr logisch für mich, weil: wenn ($r['freeFreight'] == 'ff') - dann unabhängig von den folgenden Bedingungen sollte die Aussage true zurück, und setzen Sie die variable auf 0. Ist meine Logik richtig? Sorry für diese Anfänger Frage...

Vielen Dank für jede Hilfe, die Sie anbieten können.


Also ich denke vielleicht, basiert auf den Antworten so weit (Dank an alle, hat in mischte, um zu helfen amateur) - ich denke, ich werde tun, ein Versuch mit:

if( ($r['freeFreight'] == 'ff') || ( $r['freeFreight'] == 'fw' ) && empty( $r['weight'] ) ) { 
    $r['shippingStandard'] = 0;
}

Planung bis zur Ausführung-Studie mit dieser, wenn es grundsätzlich falsch ist, bitte beraten.

  • Sind Sie der überprüfung isset($r['weight']) ?
  • Ich bin nicht.. smh - so wäre es, als wenn(($r['freeFreight'] == 'ff') || (isset($r['Gewicht'] && $r['freeFreight'] == 'fw' && $r['Gewicht'] == 0 || $r['Gewicht'] == ") ) { $r['shippingStandard'] = 0; }
  • emtpy würde sauberer sein, als wenn alle diese Prüfungen
  • Das sieht OK für mich.
  • versuchen Sie, verlassen Sie sich nie auf eine Sprache, die operator-precedence-Regeln, wenn Sie überhaupt helfen, und vor allem, wenn Sie arbeiten mit mehreren Sprachen. es kann ein bisschen langweilig, aber immer die richtigen Belichtungsreihe durchzusetzen, die "Ihre" Regeln, anstatt zu hoffen, die Sprache zu analysieren, werden es richtig für Sie.
  • guter Tipp. JamesLee: ich gehe mit Ascherer Antwort.
  • Ich Stimme zu, guter Tipp. Es bietet die Gewissheit, dass ich bin nicht über-bracketing (aber wahrscheinlicher, dass ich mich einfach nicht bracketing richtig, lol)
  • Vereinbart, ich bin nur Feintuning es leicht zu Klammer die erste Bedingung, so wird es bewertet auf seinen eigenen Bezug, ohne den rest der Anweisung.
  • Sie nicht brauchen, um setzen Sie Klammern um die ff-Stück. Sein gehen, um gesehen zu werden als der erste Betreiber, und wenn seine wahre, das wenn der wird am Ende Recht gibt
  • Sie wurden sehr, sehr hilfreich. Ich werde mit genau das, was Sie empfohlen, Ihre Antwort

InformationsquelleAutor James Lee | 2013-05-17
Schreibe einen Kommentar