Abkürzungen für Kontrolloperatoren

Frezl

Erfahrenes Mitglied
Hallo Leuz!

Kann mir jemand sagen, wie man so sachen wie FOR, IF..ELSE und anderes in PHP abkürzen kann? Ich hab in nem Script diesen Text gefunden:

$i==1 ? $s="" : $s="s";

ich vermute, dass das sowas in der art ist. aber google konnt mir dazu auch nicht viel sagen :-(

Thx, Frezl
 
hmmm... also ich hab mittlerweile rausgefunden, dass mer mit

PHP:
$i=2;
{$i==2 ? $ausgabe1 = "zwei" : $ausgabe1 = "nichtzwei";}

ne if-else-abfrage ersetzten kann.

danke für den link, ich schau mir das gleich mal an :-)
 
Über Sinn und Unsinn des ternären Operators kann man viel streiten.

Ich finde ihn bei einfachen Zuweisungen oder bei bedingten Ausgaben sinnvoll.

Hier zwei Beispiele:
PHP:
//Überprüfen von übergebenen Werten
//und ggf. setzen von Standardwert:
$page=(!empty($_GET['page'])?$_GET['page']:"home";

//Ausgabe unter Beachtung vom Plural:
echo "Die Gruppe hat ".$memCount.(($memCount==1)?" Mitglied.":" Mitglieder.");
Gruß hpvw
 
ich habs mittlerweile begriffen, wie das mit den ternären operatoren funktioniert und folgendes script gebastelt:

PHP:
<?php

$a=" bottle";
$b=" of beer";
$c=" on the wall";
$d="Take one down and pass it around, ";
$e="o more";
$f=".<br>";

for($i=99;$i>-1;$i--)
{  
  echo($i!=0?$i:"N".$e);
  echo $a;
  echo($i!=1?"s":"");
  echo $b.$c.", ";
  echo($i!=0?$i:"n".$e);
  echo $a;
  echo($i!=1?"s":"");
  echo $b.$f;
  echo($i!=0?$d:"Go to the store and buy some more, ");
  echo($i!=0?($i!=1?$i-1:"n".$e):"99");
  echo $a;
  echo($i!=2?"s":"");
  echo $b.$c.$f."<br>";  
}

?>

mein Ziel war es, das "99 bottles of beer"-lied mit nem möglichst kurzen quelltext ausgeben zu lassen. Und es hat funktioniert :-)

Hat evtl. jemand ne Ahnung, ob mer for-schleifen auch abkürzen kann? Nicht dass es nicht schon kurz wäre, aber man "kürzt" or ja auch mit || ab :-P

greez, Frezl
 
hehe, ich habs noch kürzer hingekriegt, indem ich die ganzen echos entfernt und dafür alles miteinander verknüpft hab.

PHP:
<?php
$a=" bottle";
$b=" of beer";
$c=" on the wall";
$d="Take one down and pass it around, ";
$e="o more";
$f=".<br>";
for($i=99;$i>-1;$i--){echo($i!=0?$i:"N".$e).$a.($i!=1?"s":"").$b.$c.", ".($i!=0?$i:"n".$e).$a.($i!=1?"s":"").$b.$f.($i!=0?$d:"Go to the store and buy some more, ").($i!=0?($i!=1?$i-1:"n".$e):"99").$a.($i!=2?"s":"").$b.$c.$f."<br>";}
?>

ich glaub ich geh euch damit auf die nerven :-P deshalb werd ich das thema jetzt als erledigt markieren.

Gute Nacht!
 
Bleibt die Frage, ob es sinnvoll ist, Code zu schreiben, bei dem nach 2 Tagen selbst der Programmierer nicht mehr durchblickt...
 
hpvw hat gesagt.:
Bleibt die Frage, ob es sinnvoll ist, Code zu schreiben, bei dem nach 2 Tagen selbst der Programmierer nicht mehr durchblickt...
Wieso nicht? ;)

PS:
Frezl hat gesagt.:
mein Ziel war es, das "99 bottles of beer"-lied mit nem möglichst kurzen quelltext ausgeben zu lassen. Und es hat funktioniert :-)
Das sehe ich als eine Herausforderung :p
PHP:
<?php $b='%s bottle%s of beer';$n='no more';$w='on the wall';for($i=99;$i>-1;)printf("$b $w, $b.\n%s, $b $w.\n\n",$i?$i:'No more',$i-1?'s':'',$i?$i:$n,$i-1?'s':'',$i?'Take one down and pass it around':'Go to the store and buy some more',--$i?($i+1?$i:99):$n,$i-1?'s':'');?>
273 Bytes inklusive Tags. Wer bietet weniger? ;)
 
Jetzt hab' ich das Spiel begriffen.
Matthias Reitinger hat gesagt.:
Das sehe ich als eine Herausforderung :p
Ich auch!

PHP:
<?php $b='%s bottle%s of beer';$w=' on the wall';$n="no more";for($i=99;$i+1;)printf("$b$w, $b.\n".($i?"Take one down and pass it around":"Go to the store and buy some more").", $b$w.\n\n",$i?$i:"No more",$s=$i-1?'s':'',$i?$i:$n,$s,--$i?$i<0?99:$i:$n,$i-1?'s':'')?>
265 Zeichen

Du kannst übrigens noch mindestens 4 Zeichen sparen.

Gruß hpvw

EDIT: Habe mir bei Dir eine Idee abgeguckt, auch wenn die Herangehensweise ohnehin schon ähnlich war:
PHP:
<?php $b='%s bottle%s of beer';$w=' on the wall';$n="no more";for($i=99;$i+1;)printf("$b$w, $b.\n%s, $b$w.\n\n",$i?$i:"No more",$s=$i-1?'s':'',$i?$i:$n,$s,$i?"Take one down and pass it around":"Go to the store and buy some more",--$i?$i<0?99:$i:$n,$i-1?'s':'')?>
262 Zeichen
 
Zuletzt bearbeitet:
Zurück