Vinzenz Mai: Array, Foreach

Beitrag lesen

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);

Hübscher und weniger Tippaufwand mit

$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