Eine Funktion auf alle Werte in einem Array anwenden (Thema: PHP Beispiele)

Beschreibung wie man ein Array durchlaufen und dabei eine bestimmte Funktion auf alle Werte in diesem Array anwenden kann.

1. Eindimensionales Array und array_map()


Um eine Callback-Funktion auf alle Werte in einem eindimensionalen Array anzuwenden kann array_map($callback, $array) verwendet werden.
Die Callback-Funktion muss einen Wert als Parameter annehmen und wiederum einen Wert zurückgeben, ihr Aufbau lautet demnach in etwa: function($wert) { return $neuerWert; }.
PHP-Code
<?php
	$arr = array(10, 20, 30, 40, 50);
	$timesTwo = function($value) { return $value*2; };
	$arr = array_map($timesTwo, $arr);
	var_dump($arr);
?>
Ausgabe
array(5) {
  [0]=>
  int(20)
  [1]=>
  int(40)
  [2]=>
  int(60)
  [3]=>
  int(80)
  [4]=>
  int(100)
}

1.1. Alle Werte im Array in Integer umwandeln


Mit Hilfe von array_map() können leicht alle Werte in einem Array zu Integern umgewandelt werden.
Die einfachste Version ist:
PHP-Code
<?php
	$arr = array(10, 20, '30', '40a', 50);
	$arr = array_map('intval', $arr); // wendet intval() auf alle Werte im Array an
	var_dump($arr);
?>
Ausgabe
array(5) {
  [0]=>
  int(10)
  [1]=>
  int(20)
  [2]=>
  int(30)
  [3]=>
  int(40)
  [4]=>
  int(50)
}

1.2. Alle Werte im Array in Strings umwandeln


Alle Werte in einem Array können wir folgt in den Datentyp „String” umgewandelt werden:
PHP-Code
<?php
	$arr = array(10, 20, '30', '40a', 50);
	$arr = array_map('strval', $arr); // wendet strval() auf alle Werte im Array an
	var_dump($arr);
?>
Ausgabe
array(5) {
  [0]=>
  string(2) "10"
  [1]=>
  string(2) "20"
  [2]=>
  string(2) "30"
  [3]=>
  string(3) "40a"
  [4]=>
  string(2) "50"
}

1.3. Alle nicht-skalaren im Array Werte zu -1 umwandeln


Die Callback-Funktion kann so angepasst werden, dass zum Beispiel alle nicht skalaren Werte (heißt: alles was nicht Integer, Float, String, Boolean oder Float ist) zu -1 umgewandelt werden und der Rest in einen Integer-Wert.
PHP-Code
<?php
	$arr = array(10, 20, array(), '30', '40a', 50, function() { } );
	$callback = function($value) { return (is_scalar($value)) ? intval($value) : -1; };
	var_dump(array_map($callback, $arr));
?>
Ausgabe
array(7) {
  [0]=>
  int(10)
  [1]=>
  int(20)
  [2]=>
  int(-1)
  [3]=>
  int(30)
  [4]=>
  int(40)
  [5]=>
  int(50)
  [6]=>
  int(-1)
}

2. Eindimensionales Array, foreach-Schleife


Statt array_map() kann auch eine foreach-Schleife verwendet werden, um eine Funktion auf alle Werte des Arrays anzuwenden:
PHP-Code
<?php
	$arr = array(10, 20, '30', '40a', 50);
	foreach ($arr as $key=>$val) {
		$arr[$key] = intval($val); // jeder Wert wird in Integer umgewandelt
	}
	var_dump($arr);
?>
Ausgabe
array(5) {
  [0]=>
  int(10)
  [1]=>
  int(20)
  [2]=>
  int(30)
  [3]=>
  int(40)
  [4]=>
  int(50)
}

3. Mehrdimensionales Array, array_walk_recursive()


array_walk_recursive() durchläuft ein Array und übergibt jedes Schlüssel-Wert-Paar an eine Callback-Funktion (mit Ausnahme von Schlüssel-Wert-Paaren bei denen der Wert wiederum ein Array ist).
Dieses Verhalten kann ausgenutzt werden, um die Werte im Array zu verändern.
PHP-Code
<?php
	$arr = array('100', array('50', 27), 1.3);
	// Die Werte werden per Referenz übergeben.
	// Jede Änderung an $value wirkt sich dann auf den entsprechenden Wert im Array genauso aus.
	$cb = function(&$value, $key) {
		$value = intval($value);
	};
	array_walk_recursive($arr, $cb);
	var_dump($arr);
?>
Ausgabe
array(3) {
  [0]=>
  int(100)
  [1]=>
  array(2) {
    [0]=>
    int(50)
    [1]=>
    int(27)
  }
  [2]=>
  int(1)
}

4. Mehrdimensionales Array, rekursiv aufgerufene Funktion


Alternativ zu array_walk_recursive() kann auch eine eigene Funktion implementiert werden, welche eine Callback-Funktion auf alle Werte anwendet.
PHP-Code
<?php
	function array_map_recursive($cb, $arr) {
		foreach ($arr as $key=>$val) {
			if (is_array($val)) {
				// Der Wert ist ein Array, array_map_recursive wird also wiederum auf dieses
				// Array angewendet und das Ergebnis dem Schlüssel zugewiesen
				$arr[$key] = array_map_recursive($cb, $val);
			} else {
				// Der Wert ist kein Array, die Callback-Funktion wird daher auf diesen Wert angewendet
				// und der neue Wert ersetzt den alten
				$arr[$key] = $cb($val);
			}
		}
		// Das geänderte Array wird zurückgegeben
		return $arr;
	}

	$arr = array('100', array('50', 27), 1.3);
	$cb = function($val) {
		return intval($val);
	};
	$arr = array_map_recursive($cb, $arr);
	var_dump($arr);
?>
Ausgabe
array(3) {
  [0]=>
  int(100)
  [1]=>
  array(2) {
    [0]=>
    int(50)
    [1]=>
    int(27)
  }
  [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