Bernd: letztes Komma entfernen

Hallo,

wie würdet ihr das letzte Komme entfernen wenn keine weiteren Einträge mehr vorhanden sind? Muss ich hier mit einem Zähler arbeiten oder hat PHP dafür eine dafür vorgesehene Funktion?

if($KalenderUser > 0) {
  
  foreach($KalenderUser as $array){ ?>
    <?php echo htmlspecialchars($array['vorname'] . " " . $array['name']); ?>, 
  <?php }
}?>
  1. Ok, ich hab es

    $countKalenderUser = count($KalenderUser);
    $i = 1;
    
    if($KalenderUser > 0) {
      
      foreach($KalenderUser as $array){ ?>
        <?php echo htmlspecialchars($array['vorname'] . " " . $array['name']); ?>
        <?php if ($countKalenderUser != $i) { echo ", "; } ?> 
      <?php $i ++; }
    }?>
    
    1. Hallo Bernd,

      alternativ könnte man auch nach der Schleife das letzte Zeichen abschneiden:

      
      foreach($KalenderUser as $array){
        $output .= htmlspecialchars($array['vorname'] . " " . $array['name']) + ",";
      }
      echo substr($output, 0, -1);
      

      Edit Rolf B: += in .= geändert

  2. Tach!

    wie würdet ihr das letzte Komme entfernen wenn keine weiteren Einträge mehr vorhanden sind? Muss ich hier mit einem Zähler arbeiten oder hat PHP dafür eine dafür vorgesehene Funktion?

    Eine Möglichkeit wäre, das Komma mit rtrim() zu entfernen. Dazu muss der String aber gesammelt und nicht sofort stückweise ausgegeben werden.

    Eine andere ist, durch eine andere Vorgehensweise es gar nicht erst zu diesem Komma kommen lassen. Ich würde ein Array erzeugen und das mit implode() zu einem String konvertieren. Dabei entstehen nur Kommas zwischen den Einträgen. Nun ist aber dein Array noch nicht direkt implodierbar. Das kann man lösen, indem man erst ein zweites Array aufbaut, für das Name und Vorname wie gewünscht zusammengebaut werden. Diese Angelegenheit kann man mit foreach lösen, aber auch funktional mit array_map(). Das überlass ich dir. foreach wird dir wohl leichter fallen.

    Nun noch was anderes:

    if($KalenderUser > 0) {
      
      foreach($KalenderUser as $array){ ?>
    

    Da $KalenderUser ein Array ist, ist ein Vergleich mit einem Integerwert nicht sinnvoll. PHP muss dazu das Array in einen Integerwert konvertieren, damit es da einen Vergleich anstellen kann. Es ist jedoch nicht definiert, was bei einer Konvertierung von Array nach Integer passiert. Dein Konstrukt funktioniert auf diese Weise nur zufällig. Du möchtest aber eigentlich wissen, ob Elemente vorhanden sind. Das geht zwar mit count() zu zählen, aber dich interessiert die Anzahl nicht wirklich, weswegen die Zählung unnötig ist. Andererseits ist definiert, wie ein Array in ein Boolean konvertiert werden kann. Ein leeres Array ergibt false, wenn Elemente vorhanden sind ergibt es true.

    if($KalenderUser) {
    

    Das wäre also gültig und ergibt was du möchtest. Aber, wenn du auf ein leeres Array foreach anwendest, passiert auch nichts. Wenn das if lediglich das foreach verhindern soll, so ist es nicht notwendig. Du brauchst es nur, wenn noch mehr als nur das foreach im if-Block steht.

    dedlfix.

  3. wie würdet ihr das letzte Komme entfernen wenn keine weiteren Einträge mehr vorhanden sind?

    Sowas kann man übers Template regeln. MFG

    1. Hallo pl,

      nicht mein Minus.

      ...Template...

      Grundsätzlich ja. Wenn Du Bernd dazu bringst, Schokoladenbonbons[1] zu lutschen oder sich einen Schnurrbart[2] wachsen zu lassen. Oder seinen Code in Business- und Templatemodule zu teilen. Bei existierender Codebasis ist das alles aufwändig.

      Wieauchimmer, die Logik, wie man das Komma nach dem letzten Eintrag weglässt, muss man auch im Template vorsehen. In Smarty z.B. so (ey, wow, das Forum kennt Smarty-Highlighting):

      // somecode.php
      $smarty->assign('KalenderUser', $kalenderUser);
      $smarty->display('kalender.tpl');
      
      {* kalender.tpl *}
      {foreach $KalenderUser as $user}
         {$user.vorname|escape} {$user.name|escape}{if not $user@last}, {/if}
      {/foreach}
      

      Rolf

      --
      sumpsi - posui - clusi

      1. Smarty ↩︎

      2. Moustache ↩︎

      1. ...Template...

        Grundsätzlich ja. Wenn Du Bernd dazu bringst,

        Im Prinzip macht das der Bernd ja schon (Wenn man PHP als Templatesprache betrachtet). Die Idee hat er jedenfalls verstanden. MFG

  4. Erwähnenswert: Eine weitere Möglichkeit wäre eine for-Schleife.

    $cnt = count($KalenderUser);
    
    for($i=0; $i<$cnt; ++$i) {
       ...
    }
    

    Hier bräuchtest du dann nur prüfen, ob du dich vor dem letzten array element befindest.

    if($i < $cnt-1) { $output .=  ", "; }
    

    Siehe demo auf 3v4l.org