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.
<?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 ( ) ) )