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 )