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"
}