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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ausprobieren?
mit
empty
könnte ein wenig sauberer zuwenn Sie wirklich wollen, um Sie zu brechen mehr, Sie könnten dies tun
Wenn Sie möchten, verkürzen Sie die Variablen, und verwenden Sie Sie später:
Ich wirklich nicht sagen, wie sich der rest der Datei sieht aus, wie wenn dies in eine Funktion zu bekommen, Versand, Sie konnte einfach nur zurück
$shipping
. Hoffe, das hilft. Sie sollten in der Lage sein zu verschieben die Konzepte rund um das zu bekommen, was Sie wollen$r['freeFreight']
zu$freight
, so passt er besser auf der Linie, idk, wenn Sie verwenden Sie die variable später in der FunktionIhre erste option sollte identisch sein mit der folgenden:
wenn diese Logik richtig aussieht für Sie, dann sollten Sie richtig sein und ich würde
print_r($r)
um sicherzustellen, dass Sie halten, was Sie erwarten, es zu halten. Ihre Klammer an das erste Beispiel ist genau so wie ich es tun würde.if( $r[ 'weight' ] )
ist ein sehr fauler überprüfen, und lassen nicht viel zu sagen, was Sie für die überprüfung. BITTE verwenden Sie so etwas wieempty
zu sagen, was genau Sie suchen. Nur weil PHP können Sie hängen selbst mit code, es bedeutet nicht, sollten Sie.if( empty( $r[ 'weight' ] ) )
Prüfungen für null -, set -, 0, und -"empty
überprüft für 0, das ist toll! Kann ich knock off-der Letzte Teil meiner if-Anweisung habe ich nur noch auf meine OP.empty()
schließlich aber alle es tut, ist, die zu true ausgewertet, wenn die gelieferte variable implizit zu false ausgewertet wird... ich versuche, Sie zu beseitigen Reste, wo ich kann, und ich habe nicht bekommen, über die crufty Gefühlempty()
. Was es macht ist, dass ich keine Sorge um die Existenz der variable, die ich fühle ich sollte es wissen, oder mehr zu überprüfen, die explizit mitisset()
. Auf jeden Fall, weiß nur, es ist ein Stil Wahl habe ich bisher gemacht mit Absicht.