LSpreee: unbekannte Syntaxabkürzungen

Hi folks.

Die cracks unter Euch kennen bestimmt einige Syntaxabkürzungen von php. Ich kenne nur diese.

  • statt "and" und "or" bei Vergleichsoperatoren "&&" und "||".
  • statt echo "Sie haben ".$zahl." eingegeben."; echo "Sie haben $zahl eingegeben.";

Nun ist mir anscheinend wieder eine Abkürzung aufgekommen:

  
$w_o = 0;  
function cmp ($a, $b){  
  global $w_o;  
  if ($a[$w_o] == $b[$w_o]) return 0;  
  
  return ($a[$w_o] < $b[$w_o]) ? -1 : 1;  
  
}

Dies ist eine Vergleichsfunktion, die für usort geschrieben wurde.
Aufgerufen mit

usort($zweidimarray,"cmp");

Die Funktion sortiert ein zweidimensionales Array. Die Funktion tut genau das, was sie soll bei mir. Allerdings verstehe ich den Algorithmus nicht.

Was tut die letzte return-Zeil (da hinten mit dem Fragezeichen und dem Doppelpunkt)?

Und wo werden zwei Parameter an die Funktion gegeben?

Das Beispiel ist übrigens direkt von php.net

Vielen Dank für Antworten.

  1. Hallo,

    Die cracks unter Euch kennen bestimmt einige Syntaxabkürzungen von php.

    • statt "and" und "or" bei Vergleichsoperatoren "&&" und "||".

    das sind keine Abkürzungen, sondern gleichartige Operatoren mit unterschiedlicher Priorität.

    • statt echo "Sie haben ".$zahl." eingegeben."; echo "Sie haben $zahl eingegeben.";

    Das ist zwar im Ergebnis das Gleiche, aber ein kleiner Bedeutungsunterschied.

    return ($a[$w_o] < $b[$w_o]) ? -1 : 1;

    Und das ist der ternäre Operator, auch Fragezeichen-Operator genannt. Eine elegante Konstruktion:

    (expr ? a : b)

    Dieser Ausdruck gibt a zurück, wenn expr im boolschen Sinn wahr ist, sonst b.

    usort($zweidimarray,"cmp");
    Und wo werden zwei Parameter an die Funktion gegeben?

    Das macht usort() selbständig, wenn es die Funktion cmp aufruft.

    Ciao,
     Martin

    --
    Der Stress von heute ist die gute alte Zeit von morgen.
    1. Vielen Dank, Martin, für diese ausführliche Erklärung.

  2. Was tut die letzte return-Zeil (da hinten mit dem Fragezeichen und dem Doppelpunkt)?

    Bedingung wahr ? dann das : sonst das

    Und wo werden zwei Parameter an die Funktion gegeben?

    Hoffentlich da wo sie aufgerufen wird?!

  3. Hi folks.

    Die cracks unter Euch kennen bestimmt einige Syntaxabkürzungen von php. Ich kenne nur diese.

    • statt "and" und "or" bei Vergleichsoperatoren "&&" und "||".

    In Perl haben die eine sehr verschiedene Rangstufe.

    • statt echo "Sie haben ".$zahl." eingegeben."; echo "Sie haben $zahl eingegeben.";

    Wobei du schlecht gegen schlechter vertauscht.
    echo "i ", $am, "allready ", a_list( "function" );

    Wie auch in perl

    return ($a[$w_o] < $b[$w_o]) ? -1 : 1;

    das ist eine eine if/else Schreibweise

    Die kann auch verschachtelt werden im Sinne von if/else(if/else))

    $a = (
       $b < 1
       ? 1
       : ( $b < 5
           ? 2
           : ( $b < 19
               ? 3
               : 42
             )
         )
     );

    Die Schreibweise sollte nur für triviale Vergleiche verwendet werden.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hi!

      return ($a[$w_o] < $b[$w_o]) ? -1 : 1;
      das ist eine eine if/else Schreibweise

      Wenn du den kompletten Ausdruck betrachtest, magst du Recht haben.

      if ($a[$w_o] < $b[$w_o])  
        return -1  
      else  
        return 1;
      

      oder auch

      if ($a[$w_o] < $b[$w_o])  
        return -1  
      return 1;
      

      sind vom Resultat her Alternativen obigen Konstrukts. Betrachtet man jedoch ?: und if/else separat, so ist das eine ein Operator, der ein Ergebnis liefert, und das andere eine Kontrollstruktur, die den Programmablauf beeinflusst.
      Man kann zwar zu jedem ?:-Gebilde eine alternatives if/else schreiben, aber nicht umgekehrt (jedenfalls nicht ohne Zuhilfenahme weiterer Syntaxelemente).

      Lo!