foreach -> letztes Element

Fragen rund um PHP,HTML,CSS und MySQL

foreach -> letztes Element

Beitragvon Manuel.Schmöllerl » 5. Dez 2011, 15:23

Hallo,

ich möchte eine Bilderliste in einer foreach-Schleife ausgeben. Das funktioniert auch problemlos:

Code: Alles auswählen
foreach ((explode(",", "REX_MEDIALIST[1]")) as $gentry) {
echo '\"files/' . $gentry . '\",';
}


Jetzt möchte ich aber beim letzten Element das Komma ',' weglassen.

Ich habe schon Einiges versucht, habe aber leider keinen Erfolg damit. :(

Vielleicht hat jemand eine Lösung für mich.

Bitte, danke.

Alles Gute und Beste Grüße
Manuel
„In der Einfachheit liegt die höchste Vollendung.“
(Leonardo da Vinci)
Manuel.Schmöllerl
 
Beiträge: 139
Registriert: 10. Apr 2006, 22:48
Wohnort: Wien

Re: foreach -> letztes Element

Beitragvon jeandeluxe » 5. Dez 2011, 15:53

Manuel.Schmöllerl hat geschrieben:Jetzt möchte ich aber beim letzten Element das Komma ',' weglassen.

Pack deine Ausgabe erstmal in ne Variable (statt dem echo()), entferne das hintere Komma mit rtrim(), und gib den Kram dann aus..

hth,
Jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

Re: foreach -> letztes Element

Beitragvon Manuel.Schmöllerl » 6. Dez 2011, 14:41

Danke für deine Hilfe, Jan.

Ich habe es jetzt so gelöst:
Code: Alles auswählen
$bilder = explode(',', trim("REX_MEDIALIST[1]"));
$letztes_bild = end($bilder);

foreach ($bilder as $bild) {
   if ($bild == $letztes_bild) {
          print '{image : \'files/' . $bild . '\', thumb : \'index.php?rex_img_type=fotogalerie&rex_img_file=' . $bild . '\'}';
    }
   else {
          print '{image : \'files/' . $bild . '\', thumb : \'index.php?rex_img_type=fotogalerie&rex_img_file=' . $bild . '\'},';
    }
}


Ist vielleicht nich so elegant, aber es funktioniert.

Alles Gute und Beste Grüße
Manuel
„In der Einfachheit liegt die höchste Vollendung.“
(Leonardo da Vinci)
Manuel.Schmöllerl
 
Beiträge: 139
Registriert: 10. Apr 2006, 22:48
Wohnort: Wien

Re: foreach -> letztes Element

Beitragvon jeandeluxe » 6. Dez 2011, 14:48

ungetestet:

Code: Alles auswählen
$out = '';
foreach ((explode(",", "REX_MEDIALIST[1]")) as $gentry)
{
  $out .= '\"files/' . $gentry . '\",';
}
echo rtrim($out,',');


hth,
jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

Re: foreach -> letztes Element

Beitragvon Markus.Lorch » 6. Dez 2011, 18:44

Hatte mir da auch Gedanken drüber gemacht und habs mit implode einfach wieder zusammen gebaut. Wäre es mit rtrim perfomanter?
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle
Benutzeravatar
Markus.Lorch
 
Beiträge: 635
Registriert: 21. Okt 2007, 16:22
Wohnort: Walheim

Re: foreach -> letztes Element

Beitragvon Markus.Staab » 6. Dez 2011, 19:12

Hi,

Ich denke mit groesserer anzahl an elementen wird explode + implode immer schneller, wobei beides sehr schnell sein sollte in diesem mini szenario.

Gruß Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Re: foreach -> letztes Element

Beitragvon Xong » 6. Dez 2011, 22:07

Das kann man gut als Einzeiler lösen:
Code: Alles auswählen
if(!empty('REX_MEDIALIST[1]')) echo '"files/'.implode('","files/', explode(',', 'REX_MEDIALIST[1]')).'"';


Okay, leserlich ist das für den Ungeübten nicht, aber ich nutze das häufig so, weil es einfach die schnellste Variante ist.
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: foreach -> letztes Element

Beitragvon Hirbod » 11. Jan 2012, 03:45

Hi,

finde es toll das ich irgendwie nie auslerne :)
Ich kannte end() nicht mal.

Hab das immer so gemacht.

Code: Alles auswählen
$images = explode(",", "REX_MEDIALIST[1]");
if(is_array($images)){
    $amount_of_images = count($images);
    $i = 1;
    foreach($images as $img){
   
        hier einfach rein, ob $i kleiner als $amount, wenn ja, mach x, ansonsten y

        $i++;
    }
}
Hirbod
 
Beiträge: 369
Registriert: 15. Jan 2008, 13:46


Zurück zu PHP/HTML/CSS/MySQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron