Array, Foreach
Miko
- php
0 suit0 dave0 Miko0 Vinzenz Mai
0 Vinzenz Mai
0 Miko
2 Sven Rautenberg (noreg)
Hallo
Ich brauche von einem Array die Jahren und möchte es gerne in Blöcke ausgeben, sprich 1 Block gleich 5 Jahre
mein array sieht z.b so aus
$array = array(2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000);
foreach ($array as &$value) {
echo $value;
}
jetzt wie kann ich am besten das so ausgeben, das ich so ein div habe?
<div>2011,2010,2009,2008,2007</div>
<div>2006,2005,2004,2003,2002</div>
<div>2001,2000</div>
würde mich freuen
vielen dank miko
foreach ($array as &$value) {
Gibts einen Grund, warum du hier eine Referenz verwendest?
jetzt wie kann ich am besten das so ausgeben, das ich so ein div habe?
In einer Schleife ausgeben, den aktuellen Index+1 modulo 5 nehmen und schaun obs einen Rest gibt - wenns keinen Rest gibt, neues div-Element anfangen.
Hi,
In einer Schleife ausgeben, den aktuellen Index+1 modulo 5 nehmen und schaun obs einen Rest gibt - wenns keinen Rest gibt, neues div-Element anfangen.
Warum nicht Index modulo 4?
Wäre voll viel performanter!!!11
~dave
Warum nicht Index modulo 4?
Wäre voll viel performanter!!!11
Kannst du mir ein kleines beispiel geben
ich versteh das nicht ganz
Hallo Miko,
der Modulo-Operator ist ein arithmetischer Operator. Er gibt den Rest bei einer ganzzahligen Division zurück.
Warum nicht Index modulo 4?
Wäre voll viel performanter!!!11
wie gesagt, ist das einfach falsch und liefert nicht das gewünschte Ergebnis.
Kannst du mir ein kleines beispiel geben
ich versteh das nicht ganz
Du solltest zuallererst statt
foreach ($array as &$value) {
echo $value;
}
Dein Array mit
foreach ($array as $key => $value) {
# $key enthält nun den Index des jeweiligen Elementes
# Verfahre, wie suit vorgeschlagen hat.
}
durchlaufen.
Frage bitte konkret nach, wenn Du etwas nicht verstanden hast.
Freundliche Grüße
Vinzenz
$arr = array(2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000);
foreach ($arr as $key => $value) {
$newkey = $key+1;
if($newkey % 5 == 0) {
echo '<div>'.$value.'</div>';
} else {
echo $value;
}
}
So bekomme ich beim if ein jahr und unten 4.
die trennung stimmt schonmal, aber wie bekomme ich den alle 5 jetzt in einem div?
$newkey = $key+1;
if($newkey % 5 == 0) {
du kannst auch gleich ($key+1)%5 notieren - die zwischenvariable "$newkey" ist unnötig
So bekomme ich beim if ein jahr und unten 4.
So hast du es auch programmiert :)
die trennung stimmt schonmal, aber wie bekomme ich den alle 5 jetzt in einem div?
Wenn das Array mindestens 1 Element hat mache ein div-Element auf, dann lass die schleife durchlaufen - wenn die Bedingung zutrifft mach das div-Element zu und gleich wieder auf - nach der Schleife machst du das verbleibende offene div-Element wieder zu.
Hallo,
du kannst auch gleich ($key+1)%5 notieren - die zwischenvariable "$newkey" ist unnötig
[...]
Wenn das Array mindestens 1 Element hat mache ein div-Element auf, dann lass die schleife durchlaufen - wenn die Bedingung zutrifft mach das div-Element zu und gleich wieder auf - nach der Schleife machst du das verbleibende offene div-Element wieder zu.
aller guten Dinge sind drei :-)
Freundliche Grüße
Vinzenz
Hallo,
In einer Schleife ausgeben, den aktuellen Index+1 modulo 5 nehmen und schaun obs einen Rest gibt - wenns keinen Rest gibt, neues div-Element anfangen.
Warum nicht Index modulo 4?
Wäre voll viel performanter!!!11
aber nicht das gewünschte :-(
Wenn Du modulo 4 rechnest, bekommst Du eben genau 4 Zahlen je div-Element, der OP will aber 5. Will man 5, so nimmt man modulo 5 :D
Freundliche Grüße
Vinzenz
$arr = array(2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000);
foreach ($arr as $key => $value) {
$newkey = $key+1;
if($newkey % 5 == 0) {
echo '<div>'.$value.'</div>';
} else {
echo $value;
}
}
So bekomme ich beim if ein jahr und unten 4.
die trennung stimmt schonmal, aber wie bekomme ich den alle 5 jetzt in einem div?
Hi,
if($newkey % 5 == 0) {
echo '<div>'.$value.'</div>';
}
> So bekomme ich beim if ein jahr und unten 4.
> die trennung stimmt schonmal, aber wie bekomme ich den alle 5 jetzt in einem div?
So erreichst du, dass jedes fünfte Element in einem eigenen Div eingepackt wird.
Du solltest im Fall x%5=0 den aktuellen Div beenden und einen neuen aufmachen. Die korrekte Gesamtausgabe der Div-Verschachtelung ergibt sich später erst über die gesamte Schleife.
Pseudocode:
öffne div
über alle Jahre
wenn index+1%5=0, dann
schließe div
öffne div
gib Jahreszahl aus
schließe div
Bis die Tage,
Matti
--
[Webapplikationen in C++ entwickeln](http://tntnet.org/)
Hallo,
$arr = array(2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000);
foreach ($arr as $key => $value) {
$newkey = $key+1;
if($newkey % 5 == 0) {
# if( ($key + 1) % 5 == 0) {
echo '<div>'.$value.'</div>';
} else {
echo $value;
}
}
>
> So bekomme ich beim if ein jahr und unten 4.
> die trennung stimmt schonmal, aber wie bekomme ich den alle 5 jetzt in einem div?
Bevor Du die Schleife beginnst, musst Du das öffnende <div>-Tag des ersten div-Elementes schreiben.
In der Schleife prüfst Du (wie von suit vorgeschlagen und ähnlich wie von Dir angewandt), ob das div-Element geschlossen werden muss, weil eine neue 5er-Serie beginnt.
Wenn ja
schreibe schliessendes Tag,
schreibe öffnendes Tag
Sonst
schreibe ein Komma
Ende Wenn
Schreibe Wert
Nach der Schleife schreibst Du das schliessende Tag des letzten divs.
Verstehst Du die von mir vorgeschlagene Vorgehensweise.
Freundliche Grüße
Vinzenz
echo '<div>';
foreach ($arr as $key => $value) {
$newkey = $key+1;
if($newkey % 5 == 0) {
echo $value.'</div>'.'<div>';
} else {
echo $value.',';
}
}
echo '</div>';
Jetzt hab ichs entlich verstanden :-)
Vielen Dank euch allen
Noch ein paar Verbesserungen:
$newkey = $key+1;
if($newkey % 5 == 0) {
diese $newkey-Variable ist unnütz, da kannst du eine Zeile code sparen;
if(($key+1) % 5 == 0) {
echo $value.'</div>'.'<div>';
hier drei Strings zu verketten ist unnötig - zwei reichen.
echo $value . '</div><div>';
Vielen dank für die Verbesserungen
Moin!
Ich brauche von einem Array die Jahren und möchte es gerne in Blöcke ausgeben, sprich 1 Block gleich 5 Jahre
mein array sieht z.b so aus
$array = array(2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000);
foreach ($array as &$value) {
echo $value;
}
Benutze die Funktion array\_chunk(), um dein Array in Teile zu je 5 Stücke zu unterteilen, und nimm dann eine doppelte foreach-Schleife.
- Sven Rautenberg
Benutze die Funktion array_chunk(), um dein Array in Teile zu je 5 Stücke zu unterteilen, und nimm dann eine doppelte foreach-Schleife.
Du immer mit deinen Öko-Alternativ-Lösungen :)
Hallo,
Ich brauche von einem Array die Jahren und möchte es gerne in Blöcke ausgeben, sprich 1 Block gleich 5 Jahre
mein array sieht z.b so aus
$array = array(2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003, 2002, 2001, 2000);
$array = [link:http://de2.php.net/manual/de/function.range.php@title=range](2011, 2000);
foreach ($array as &$value) {
echo $value;
}
>
> Benutze die Funktion array\_chunk(), um dein Array in Teile zu je 5 Stücke zu unterteilen, und nimm dann eine doppelte foreach-Schleife.
und bei PHP 5.3.0 oder neuer sogar ohne explizite Schleife mit array\_map und einer Lambda-Funktion:
~~~php
# Unser Ausgangsarray:
$array = [link:http://de2.php.net/manual/de/function.range.php@title=range](2011, 2000);
# Wir teilen das Array, wie von Sven vorgeschlagen, mit array_chunk
# in ein Array von 5er-Arrays auf. Das letzte kann kleiner ausfallen,
$chunks = [link:http://de2.php.net/manual/de/function.array-chunk.php@title=array_chunk]($array, 5);
# schaffen uns eine Lambda-Funktion, die ein Array mit dem Verbindungszeichen
# Komma (,) zu einer Zeichenkette zusammenfasst, siehe auch Beispiel #2 zu
# [link:http://de2.php.net/manual/de/function.array-map.php@title=array_map]:
$kommaliste = function($arr) { return implode(',', $arr); };
# wenden diese per array_map auf die inneren Arrays an
# und fassen das entstehende Arrays aus Zeichenketten mit der Zeichenfolge
# "</div>\n<div>" zusammen,
# setzen ein <div> vornedran
# und ein </div> hintendran
$result = '<div>'
. implode("</div>\n<div>", [link:http://de2.php.net/manual/de/function.array-map.php@title=array_map]($kommaliste, $chunks))
. "</div>\n";
# und geben unsere div-Kette aus.
# Anmerkung: die Zeilenumbrüche habe ich der besseren Lesbarkeit wegen eingefügt.
print $result;
Wir können den Code selbstverständlich übersichtlicher gestalten, wenn wir auf die überflüssigen Hilfsvariablen $array und $chunks verzichten ;-)
<?php
header("Content-Type: text/plain");
$funct = function($value) { return implode(',', $value); };
print '<div>' . implode("</div>\n<div>", array_map($funct, array_chunk(range(2011, 2000), 5))) . '</div>';
?>
Ausgabe:
<div>2011,2010,2009,2008,2007</div>
<div>2006,2005,2004,2003,2002</div>
<div>2001,2000</div>
Freundliche Grüße
Vinzenz