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

  1. 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.
  2. Jetzt wird ein Cache-Array angelegt.
  3. 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.
  4. Das Cache-Array wird jetzt eine Kopie von $array, mit dem Unterschied, dass jeder Schlüssel 1 höher ist als beim Original
  5. 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)
  6. 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.

1 Star2 Stars3 Stars4 Stars5 Stars (Wurde noch nicht bewertet)
Loading...


Hinterlasse einen Kommentar!

Time limit is exhausted. Please reload the CAPTCHA.

»Informationen zum Artikel

Autor: Simon
Datum: 09.04.2009
Zeit: 12:52 Uhr
Kategorien: Codeschnipsel
Gelesen: 15694x heute: 2x

Kommentare: RSS 2.0.
Diesen Artikel kommentieren oder einen Trackback senden.

»Meta