Reihenfolge der Elemente in einem Array umkehren (Thema: PHP Beispiele)

Beschreibung des Verfahrens beim Umdrehen der in einem Array gespeicherten Werte.

URL: http://www.rither.de/a/informatik/php-beispiele/arrays/reihenfolge-der-elemente-in-einem-array-umkehren/

1. Array mittels array_reverse() umdrehen


Die Reihenfolge der Elemente in einem Array kann mit array_reverse($array) umgekehrt werden:
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'drei', 'vier', 'fünf');
	var_dump(array_reverse($arr));
?>
Ausgabe
array(5) {
  [0]=>
  string(4) "fünf"
  [1]=>
  string(4) "vier"
  [2]=>
  string(4) "drei"
  [3]=>
  string(4) "zwei"
  [4]=>
  string(4) "eins"
}

Falls die Zuordnung zwischen Schlüssel und Wert wichtig ist, kann (bool)true als zweiter Parameter an die Funktion angehängt werden.
Dies macht aber nur bei Integer-Schlüsseln einen Unterschied.
Schlüssel vom Datentyp String bleiben davon unberührt.
PHP-Code
<?php
	// String-Schlüssel, bleiben gleich
	$arr = array('peter'=>'180cm', 'sabine'=>'170cm', 'ralf'=>'173cm');
	var_dump(array_reverse($arr));
	var_dump(array_reverse($arr, true));

	// Integer-Schlüssel, ohne true als zweiter Parameter werden die Schlüssel neu gebildet (aufsteigend, beginnend bei 0)
	$arr = array(10=>'zehn', 20=>'zwanzig', 30=>'dreißig');
	var_dump(array_reverse($arr));
	var_dump(array_reverse($arr, true));	
?>
Ausgabe
array(3) {
  ["ralf"]=>
  string(5) "173cm"
  ["sabine"]=>
  string(5) "170cm"
  ["peter"]=>
  string(5) "180cm"
}
array(3) {
  ["ralf"]=>
  string(5) "173cm"
  ["sabine"]=>
  string(5) "170cm"
  ["peter"]=>
  string(5) "180cm"
}
array(3) {
  [0]=>
  string(7) "dreißig"
  [1]=>
  string(7) "zwanzig"
  [2]=>
  string(4) "zehn"
}
array(3) {
  [30]=>
  string(7) "dreißig"
  [20]=>
  string(7) "zwanzig"
  [10]=>
  string(4) "zehn"
}

2. Elemente mit einer for-Schleife umgekehrt anordnen


Auch die Anwendung einer for-Schleife ist möglich, aber komplizierter als array_reverse().
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'drei', 'vier', 'fünf');
	$arr = array_values($arr); // sicherstellen, dass die Elemente von 0 bis n aufsteigend nummeriert sind
	$arr2 = array();
	for ($x=count($arr)-1; $x>=0; $x--) {
		$arr2[] = $arr[$x];
	}
	var_dump($arr2);
?>
Ausgabe
array(5) {
  [0]=>
  string(4) "fünf"
  [1]=>
  string(4) "vier"
  [2]=>
  string(4) "drei"
  [3]=>
  string(4) "zwei"
  [4]=>
  string(4) "eins"
}

Im vorherigen Beispiel gehen die Schlüssel verloren. Sollen diese erhalten bleiben, dann kann wie folgt vorgegangen werden:
PHP-Code
<?php
	$arr = array('eins', 'zwei', 'drei', 'vier', 'fünf');
	$keys = array_keys($arr);
	$arr2 = array();
	for ($x=count($keys)-1; $x>=0; $x--) {
		$key = $keys[$x];
		$arr2[$key] = $arr[$key];
	}
	var_dump($arr2);
?>
Ausgabe
array(5) {
  [4]=>
  string(4) "fünf"
  [3]=>
  string(4) "vier"
  [2]=>
  string(4) "drei"
  [1]=>
  string(4) "zwei"
  [0]=>
  string(4) "eins"
}

3. Mehrdimensionales Array umdrehen


Um ein mehrdimensionales Array umzudrehen kann eine rekursive Funktion verwendet werden.
Die hier vorgestellte bekommt eine Variable beliebigen Datentyps übergeben.
Handelt es sich um kein Array, dann wird diese Variable direkt zurückgegeben.
Handelt es sich um ein Array, dann wird auf jedes Element die Funktion wiederum angewendet und zum Schluss dieses Array mit array_reverse() umgedreht.
Dadurch wird die Funktion letztlich auf jedes Unterarray im Array angewendet, welche wiederum alle durch array_reverse() umgedreht werden.
PHP-Code
<?php
	function array_reverse_recursive($arr) {
		if (!is_array($arr)) {
			return $arr;
		} else {
			foreach ($arr as $key=>$val) {
				$arr[$key] = array_reverse_recursive($val);
			}
			return array_reverse($arr);
		}
	}
	$arr = array('monatsanfang'=>array(1, 2, 3), 'monatsende'=>array(28, 29, 30));
	$arr = array_reverse_recursive($arr);
	var_dump($arr);
?>
Ausgabe
array(2) {
  ["monatsende"]=>
  array(3) {
    [0]=>
    int(30)
    [1]=>
    int(29)
    [2]=>
    int(28)
  }
  ["monatsanfang"]=>
  array(3) {
    [0]=>
    int(3)
    [1]=>
    int(2)
    [2]=>
    int(1)
  }
}
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK