User Tools

Site Tools


php:functions:array:arrayreplacekeysrekursive

[PHP] array_replace_keys_rekursive()

Auch diese Funktion ist das Resultat einer Hilfestellung im Tutorials.de-Forum. Die Frage war, wie man einfache in @ im Key eines Arrays entfernen kann. Dieses @ kam aus einem XML-File und gab Probleme beim weitergeben an Smarty.

Diese Callback-Funktion wird gleich aufgerufen wie str_replace. Anstelle des Textes wird das Array übergeben.

Code

array_replace_keys_rekursive.php
<?php
/**
* mpl           by ERB software
* @author       stefan.erb(at)erb-software.com
*/
 
/**
 * Ein Rekursiver String-Replace auf die Schlüssel eines Arrays
 * @param $array    Array   Array, dessen Keys ersetz werden sollten
 * @param $search   String  Analog $search von str_replace
 * @param $replace  String  Analog $replace von str_replace
 * @return          Array
 */
function array_replace_keys_rekursive($search, $replace, $array){
	//Wenn der Array leer ist, diesen leer zurückgeben
	if(count($array)==0) return $array;
	//Die Schlüssel extrahieren
	$keys = array_keys($array);
	//In allen Schlüsseln @ durch nix ersetzen
	foreach($keys as $index => $key){
		//Falls das item ein array ist, darauf ebenfalls diese Funktion anwenden
		$function = __FUNCTION__;             
		if(is_array($array[$key])) $array[$key] = $function($search, $replace, $array[$key]);
		$keys[$index] = str_replace($search, $replace, $key);
	}
	//Den Array wieder zusammensetzen
	return array_combine($keys, $array);
}
?>

Testaufruf

<?php 
//Testarray
//Alle @ sollten aus den Keys entfernt werden
$array = array(
			'@a' => 'A', 
			'b' => 'B', 
			'@c' => array(
					'@d' => 'D', 
					'e'=>'E', 
					'@f'=>array()
			)
);
 
print_r(array_replace_keys_rekursive('@', '', $array));
?>

Ausgabe

Array
(
	[a] => A
	[b] => B
	[c] => Array
		(
			[d] => D
			[e] => E
			[f] => Array
				(
				)

		)

)
php/functions/array/arrayreplacekeysrekursive.txt · Last modified: 09.12.2013 09:39:54 (external edit)