Index / Schlüssel von Arrays um 1 erhöhen/verschieben
Heute zeige ich euch mal eine PHP-Funktion, mit der man den Index von numerischen Arrays um 1 erhöhen kann. Wenn der niedrigste Index (Schlüssel/Key) eines Arrays z.B. vorher 0 war, ist er nachher 1.
Sinn und Zweck der Funktion
In der Regel sollte man versuchen, eine andere Lösung zu finden. Wenn man die Nummerierung von Arrayelementen verändern muss, liegt wahrscheinlich ein Designfehler vor.
Falls es wirklich nicht anders geht, kann man die Elemente eines Arrays mit dieser Funktion problemlos um 1 nach hinten verschieben.
Die Funktion incArrayKeys()
Hier seht ihr die Funktion, die eigentlich gar nicht so kompliziert aussieht:
/** * Erhöht die Keys eines Arrays um 1 */ function IncArrayKeys($array) { krsort($array); //1 $new_array = array(); //2 foreach($array as $key => $value) //3 { $new_array[$key + 1] = $value; //4 } ksort($new_array); //5 return $new_array; //6 }
Funktionsweise
- Als erstes wird der Parameter $array rückwärts nach den Schlüsseln sortiert. Wenn es erst so aussieht 0 -> 1 -> 2 -> 3 -> 4, sieht es nachher so aus 4 -> 3 -> 2 -> 1 -> 0. So lässt sich der Schlüssel bequem nach oben hin verschieben, ohne dass Kollisionen entstehen.
- Jetzt wird ein Cache-Array angelegt.
- Das Array, das übergeben wurde, wird jetzt mit foreach durchlaufe. Durch die vorherige Sortierung mit krsort wird beim Element mit dem höchsten Index angefangen.
- Das Cache-Array wird jetzt eine Kopie von $array, mit dem Unterschied, dass jeder Schlüssel 1 höher ist als beim Original
- Da jetzt die Indexe fest stehen, wird wieder nach den Schlüsseln sortiert. Es wird so sortiert, dass der niedrigste Schlüssel vorne ist. (mit ksort)
- Das Cache-Array wird zurückgegeben.
Man kann die Funktion folgendermaßen verwenden:
Anwendung von incArrayKeys()
$arr = array(1,2,3,4,5); print_r($arr); //Keys fangen bei 0 an print_r(IncArrayKeys($arr)); //Keys fangen bei 1 an
Lässt man sich das Array vor und nach Anwendung von incArrayKeys($arr) ausgeben, stellt man fest, dass der Index 0 zu 1 wird, 1 zu 2, usw.
Schreibe einen Kommentar