1. Anwendung von array_slice()
Um einen Teil aus einem Array zu extrahieren bzw. zu kopieren kann array_slice($array, $offset, [$length, [$preserve_keys]]) verwendet werden.
Ist $length negativ, dann wird vom Ende aus gezählt (-1 entspricht also dem vorletzten Element).
Ist $length nicht gesetzt, dann werden alle Elemente ab $offset kopiert.
$preserve_keys gibt an, ob die Schlüssel beibehalten werden sollen.
Standardmäßig ist es auf false gestellt.
PHP-Code
<?php $arr = array('eins', 'zwei', 'drei', 'vier', 'fünf'); var_dump(array_slice($arr, 0, 1)); // das erste Element (die Offsets beginnen bei 0) var_dump(array_slice($arr, 2, 2)); // das dritte und das vierte Element var_dump(array_slice($arr, count($arr)-2, 1)); // das vorletzte Element var_dump(array_slice($arr, 2, -1)); // alle Elemente vom dritten bis zum vorletzten (einschließlich) ?>
Ausgabe
array(1) { [0]=> string(4) "eins" } array(2) { [0]=> string(4) "drei" [1]=> string(4) "vier" } array(1) { [0]=> string(4) "vier" } array(2) { [0]=> string(4) "drei" [1]=> string(4) "vier" }
Der Unterschied von $preserve_keys=false (Standardeinstellung) und $preserve_keys=true:
PHP-Code
<?php $arr = array(100=>'einhundert', 200=>'zweihundert', 300=>'dreihundert'); var_dump(array_slice($arr, 1, null, false)); var_dump(array_slice($arr, 1, null, true)); ?>
Ausgabe
array(2) { [0]=> string(11) "zweihundert" [1]=> string(11) "dreihundert" } array(2) { [200]=> string(11) "zweihundert" [300]=> string(11) "dreihundert" }
2. Werte mit einer for-Schleife auslesen und kopieren
Alternativ zu array_slice() kann auch eine for-Schleife verwendet werden.
PHP-Code
<?php $arr = array(100=>'einhundert', 200=>'zweihundert', 300=>'dreihundert'); $offset = 1; $length = 2; $arr2 = array(); for ($x=$offset, $a=array_values($arr), $c=count($a); $x<$offset+$length && $x<$c; $x++) { $arr2[] = $a[$x]; } var_dump($arr2); ?>
Ausgabe
array(2) { [0]=> string(11) "zweihundert" [1]=> string(11) "dreihundert" }
Im vorherigen Beispiel gehen die Schlüssel verloren.
Sollen diese erhalten bleiben, kann wie folgt vorgegangen werden.
PHP-Code
<?php $arr = array(100=>'einhundert', 200=>'zweihundert', 300=>'dreihundert'); $offset = 1; $length = 2; $arr2 = array(); for ($x=$offset, $k=array_keys($arr), $c=count($k); $x<$offset+$length && $x<$c; $x++) { $key = $k[$x]; $arr2[$key] = $arr[$key]; } var_dump($arr2); ?>
Ausgabe
array(2) { [200]=> string(11) "zweihundert" [300]=> string(11) "dreihundert" }