Keys in Arrays ersetzen, wenn diese "@" enthalten

Philipp15b

Grünschnabel
Hallo,
ich habe ein simpleXML-Dokument in ein Array umgewandelt, jetzt haben aber einige Arrays den Key "@attributes". Wenn ich dieses in Smarty verwenden will, gibt das einen Fatal Error aus.

Wie also kann ich in einem Array die Keys mit einem "@" ändern?

MfG,
Philipp15b
 
PHP:
//Testarray
$array = array('@a' => 'A', 'b' => 'B', '@c' => 'C');
//Die Schlüssel extrahieren
$keys = array_keys($array);
//In allen Schlüsseln @ durch nix ersetzen
array_walk($keys, create_function('&$key', '$key = str_replace("@", "", $key);'));
//Den Array wieder zusammensetzen
$array = array_combine($keys, $array);
print_r($array);

Nachtrag:
Falls es ein verschavhteltes Array ist, ists nur ein klein wenig aufwendiger
PHP:
//Testarray
$array = array('@a' => 'A', 'b' => 'B', '@c' => array('@d' => 'D', 'e'=>'E'));

print_r(correctKeysRekursive($array));

function correctKeysRekursive($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       
        if(is_array($array[$key])) $array[$key] = correctKeysRekursive($array[$key]);    
        $keys[$index] = str_replace("@", "", $key);
    }
    //Den Array wieder zusammensetzen
    return array_combine($keys, $array);
}
 
Vielleicht solltest du mal sagen, was du net hinbekommst. Und woran es scheitert.
Da sieht man mal wieder, dass fertigen Code posten nix bringt -.-
 
Mach mal ein var_dump() auf dein Ursprungsarray und poste das hier. Dann sehen wir mal wie die Ausgangslage ist. Ansonsten können wir auch heiteres Rätselraten veranstallten.

Nachtrag:
Du kannst am Anfang auch den array validieren
PHP:
function correctKeysRekursive($array){
    if(!is_array($array) || count($array)=0) return $array;
    //Rest vom Code
}
 
Beschämend für mich. Das hat man davon wenn man Code ungetestet postt. Ist voller Fehler.
Die neue Zeile muss natürlich so aussehen
PHP:
    if(count($array)==0) return $array;
 
Zurück