1. array_values()
Die Schlüssel eines Arrays können am leichtesten mit array_values($array) neu gebildet werden. Bei Anwendung gibt die Funktion alle Werte des übergebenen Arrays unter Beibehaltung der Reihenfolge zurück, wobei die Schlüssel dann fortlaufend von 0 bis n durchnummeriert (0, 1, 2, 3, ...).
Im nachfolgenden Beispiel enthält das Array $arr die Werte 1, 2 und 3, die den Schlüsseln a, b und c zugeordnet sind. Diese Schlüssel sollen zu 0, 1 und 2 geändert werden.
<?php
$arr = array('a'=>1, 'b'=>2, 'c'=>3);
$arr = array_values($arr);
print_r($arr);
?>
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Im nächsten Beispiel wird gezeigt, dass array_values() auch bei Elementen mit numerischen Schlüsseln funktioniert und die Reihenfolge korrekt beibehält:
<?php $arr = array(1324=>1, 184=>2, 831=>3, 192=>4); $arr = array_values($arr); print_r($arr); ?>
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
2. foreach-Schleife
Im nächsten Beispiel wird statt array_values() eine foreach-Schleife verwendet, welche ein zweites Array $arr2 bildet. Mit jeder Iteration wird $arr2 ein neues Element zugeordnet, dessen Schlüssel dem Zweifachen der Anzahl der Iterationen entspricht ($x*2). Eine Schleife bietet dementsprechend mehr Flexibilität bei der Zuweisung der Schlüssel, ist dafür aber langsamer als array_values().
<?php
$arr = array(1324=>1, 184=>2, 831=>3, 192=>4);
$arr2 = array();
$x = 0;
foreach ($arr as $val) {
$arr2[$x*2] = $val;
$x++;
}
$arr = $arr2;
print_r($arr);
?>
Array
(
[0] => 1
[2] => 2
[4] => 3
[6] => 4
)
3. for-Schleife
Für die vorherige Aufgabe (Schlüssel als Vielfache von 2) eignet sich auch eine for-Schleife. Im Rahmen dieser muss allerdings von Element zu Element im Ausgangsarray gesprungen werden, was zuvor die foreach-Schleife für einen erledigt hat. Dazu werden die Funktionen next($array) und current($array) verwendet. next($array) setzt den Array-Zeiger auf die nächste Position im Array, current($array) gibt denjenigen Wert zurück, auf den der Array-Zeiger gerade zeigt.
<?php
$arr = array(1324=>1, 184=>2, 831=>3, 192=>4);
$arr2 = array();
for ($x=0, $count=count($arr); $x<$count; $x++) {
$arr2[$x*2] = current($arr);
next($arr); // Zeiger auf naechstes Element
}
$arr = $arr2;
print_r($arr);
?>
Array
(
[0] => 1
[2] => 2
[4] => 3
[6] => 4
)
Wer die Werte im Array mit Strings entsprechend des Alphabets (a, b, c, d, e...) indexieren will, der kann die nachfolgende Abwandlung der vorherigen for-Schleife verwenden, welche zusätzlich eine Variable $letter hochzählt:
<?php
$arr = array(1324=>1, 184=>2, 831=>3, 192=>4);
$arr2 = array();
// $letter++ macht aus "a" ein "b", aus "b" ein "c" usw.
// Bei Erreichen von "z" wird zu "aa" erhoeht.
for ($letter="a", $x=0, $count=count($arr); $x<$count; $x++, $letter++) {
$arr2[$letter] = current($arr);
next($arr);
}
$arr = $arr2;
print_r($arr);
?>
Array
(
[a] => 1
[b] => 2
[c] => 3
[d] => 4
)