PHP Befehl abkürzen

Cumulonimbus

Lt. Junior Grade
Registriert
Feb. 2007
Beiträge
303
Hallo,

kann man folgenden Befehl noch abkürzen, die vielen OR zusammenfassen?

if (is_numeric($session_data["client"]["from"]["groups"]) AND
$session_data["client"]["from"]["groups"] == 42 OR
$session_data["client"]["from"]["groups"] == 43 OR
$session_data["client"]["from"]["groups"] == 44 OR
$session_data["client"]["from"]["groups"] == 45 OR
$session_data["client"]["from"]["groups"] == 46) {

echo "Hallo Welt";
}
 
Also wenn du nur für den Bereich 42 bis 46 dein "Hallo Welt" ausgeben willst, dann kannst du das wie folgt abkürzen:


if (is_numeric($session_data["client"]["from"]["groups"]) AND
$session_data["client"]["from"]["groups"] >= 42 AND
$session_data["client"]["from"]["groups"] <= 46 ) {

echo "Hallo Welt";
}



Hab den Code zwar nicht getestet, aber von der syntax her müste das in Ordnung sein !
 
ja! zuerst mal $session_data["client"]["from"]["groups"] in eine eigene variable speichern z.B. $g bzw. switch verwenden!
 
wenn du werte hast, die nicht in einem bereich liegen (z.B. 14, 28, 30, 45, ...) dann kannst du zwei arrays machen
eins mit den werten u dann vergleichen
 
Und hier die Kurzfassung auf minimale Buchstabenanzahl optimiert:
PHP:
q = $session_data["client"]["from"]["groups"];
if (is_numeric(q)&&q>41&&q<47) echo "Hallo Welt";
Wer schafft es kürzer? ;-)
 
Spellcaster86 schrieb:
Also wenn du nur für den Bereich 42 bis 46 dein "Hallo Welt" ausgeben willst, dann kannst du das wie folgt abkürzen:


if (is_numeric($session_data["client"]["from"]["groups"]) AND
$session_data["client"]["from"]["groups"] >= 42 AND
$session_data["client"]["from"]["groups"] <= 46 ) {

echo "Hallo Welt";
}
Hab den Code zwar nicht getestet, aber von der syntax her müste das in Ordnung sein !

Hallo,

das funktioniert. Und wie gehe ich dann vor, wenn die Nummern nicht in einem fixen Bereich liegen, z.B. 1,2,3,21,120,150.... ?

Gruß,
Cb
Ergänzung ()

enum schrieb:
Und hier die Kurzfassung auf minimale Buchstabenanzahl optimiert:
PHP:
q = $session_data["client"]["from"]["groups"];
if (is_numeric(q)&&q>41&&q<47) echo "Hallo Welt";
Wer schafft es kürzer? ;-)

Das klappt leider nicht. Das dagegen schön:

PHP:
$q = $session_data["client"]["from"]["groups"]; 
if (is_numeric($q) AND $q >= 42 AND $q <= 46 )

Jetzt fehlt nur noch, dass ich die Gruppen fix angeben kann

PHP:
$q = $session_data["client"]["from"]["groups"]; 
if (is_numeric($q) AND $q IS IN(42,43,44,45,46 )
mag er nicht.
 
Zuletzt bearbeitet:
PHP:
$erlaubte_zahlen = array(1,2,3,21,120,150);
if(in_array($session_data['client']['from']['groups'], $erlaubte_zahlen) {
 echo 'Hallo Welt';
}

und für den kürzesten Code Wettbewerb:

PHP:
echo in_array($session_data['client']['from']['groups'],array(1,2,3,21,120,150))?'Hallo Welt':'';
 
Zuletzt bearbeitet:
PHP:
echo in_array($session_data['client']['from']['groups'],array(1,2,3,21,120,150))?'Hallo Welt':'';

Super. Der klappt :-) Danke schön Euch allen. Ich weiß zwar nicht warum, aber dass es klappt und ich weiß wo man bauen muss ums zu ändern.

Zu was ist der letzte Doppelpunkt gut?

PHP:
'Hallo Welt':'';
 
Zuletzt bearbeitet:
das ist ein trinitärer Operator. das heißt du brauchst zwingend ein entweder/oder der aufbau geht so:
(Bedingung) ? true : false;
wenn du nichts im falle false aufgeben willst schreibst du : "" also ein leerer String
 
Ah,

ich habe noch einen.

Mit echo in_array($session_data['client']['from']['groups'] wird n der Datenbank nach der Kundengruppe gesucht und dort die ID gesucht (1. Spalte). Jeder Satz hat aber auch weitere Felder.

Ich nehm mal dieses Beispiel:
PHP:
echo in_array($session_data['client']['from']['groups'],array(1,2,3,21,120,150))?'Hallo Welt':'';

Die Zahlen sind die ID's im ersten Feld. Mit einem weiteren Feld title wird die Kundengruppe benannt. Wäre es nicht besser, mit title statt mit der ID zu arbeiten (wegen Übersichtlichkeit und Verwechslungsgefahr). Und wie greife ich auf das Feld title denn zu?
 
Meiner Meinung nach ist arbeiten mit IDs besser, da sie normalerweise ein eindeutiger Identifier sind. Ich verwende auch bei Datenbanken immer ein extra ID Feld, auch wenn man durch die Kombination einer oder mehrere Spalten eine Eindeutigkeit erzeugen könnte.

Beispiel Problem in deinem Fall: Wenn du den Title änderst musst du auch dein Skript ändern, aber die ID sollte immer gleich bleiben.

Zum obigen Beispiel: Aus Lesbarkeitsgründen würde ich mein erstes Beispiel wählen, macht genau das gleiche, ist aber übersichtlicher.


so long
 
PHP:
$q=$session_data["client"]["from"]["groups"];
if(is_numeric($q)&&$q>41&&$q<47)echo"Hallo Welt";
Oh Sorry, ich darf bei PHP natürlich nicht das blöde Dollarzeichen vergessen!:rolleyes:
Jetzt passt es aber (und noch kürzer, da ohne überflüssige Leerzeichen) ...
 
enum schrieb:
PHP:
$q=$session_data["client"]["from"]["groups"];
if(is_numeric($q)&&$q>41&&$q<47)echo"Hallo Welt";
Oh Sorry, ich darf bei PHP natürlich nicht das blöde Dollarzeichen vergessen!:rolleyes:
Jetzt passt es aber (und noch kürzer, da ohne überflüssige Leerzeichen) ...

Sehr fein. Ist mir fast lieber als das Arbeiten mit array, weil ich dahinter n komplexten HTMl-Code einbauen muss.

Wie würde Dein Codeschnippsel aussehen, wenn man beliebe Nummer braucht?
 
Umständlich und schwerer erweiterbar. Arrays sind mMn auf jeden Fall zu bevorzugen, vor allem bei Reusability.

Vergleich (zur Verdeutlichung wird die Funktion zweimal aufgerufen)

PHP:
$erlaubte_zahlen = array(1,2,3,21,120,150);
...
if(in_array($session_data['client']['from']['groups'], $erlaubte_zahlen) {
 echo 'Hallo Welt';
}
...
if(in_array($session_data['client']['from']['groups'], $erlaubte_zahlen) {
 echo 'Hallo Welt';
}
PHP:
$q=$session_data["client"]["from"]["groups"];
if($q == 1 || $q == 2 || $q == 3 || $q == 21 || $q == 120 || $q == 150) {
   echo"Hallo Welt";  
}
...
if($q == 1 || $q == 2 || $q == 3 || $q == 21 || $q == 120 || $q == 150) {
   echo"Hallo Welt";  
}

Ich denke man sieht sehr schnell das es umständlicher ist, in diesem Fall ohne ein Array zu arbeiten. Zweitens sinkt die Wartbarkeit massiv, sobald du die erlaubten Zahlen mehr als einmal verwendest.


so long
 
Finde Renegades Whitelist mittels array am besten. Bei den anderen Lösungen werden Gleitkommazahlen auch akzeptiert, was nicht gewollt sein dürfte.
Außerdem ist bei allen anderen Lösungen sowas wie ctype_digit() (für Ganzzahlen besser als is_numeric()) unbedingt zu benutzen - zwar werden Zahlen in Strings zwar automatisch bei Integervergleichen gecastet, allerdings gilt das nicht nur für Zahlen...

if(5 < "lol") ist true..
 
-=Renegade=- schrieb:
PHP:
echo in_array($session_data['client']['from']['groups'],array(1,2,3,21,120,150))?'Hallo Welt':'';

Ich nehme den da oben.

Frage:

Kann ich zwischen ' und ' vor und nach Hallo Welt jeglichen HTML- und PHP Code ohne Modifikation einfügen?
 
Ja, aber wenn du es übersichtlicher willst bzw. mehere Befehle oder Schleifen einbauen willst, empfiehlt es sich, ein IF Konstrukt anstelle der ?: Abkürzung zu verwenden.
 
Zurück
Oben