Kilka dni temu potrzebowałem sposobu na zamianę obiektu SimpleXML na tablicę. Po chwili googlania, okazało się, że wszystkie gotowe już snippety są ogromne i mało wydajne ( głównie przerost formy nad treścią ), więc przedstawiam kilka wersji snippeta:

    public function SimpleXml2array ( $xmlObject, $out = array () )
    {
        foreach ( (array) $xmlObject as $index => $node )
            $out[] = ( is_object ( $node ) || is_array ( $node ) ) ? $this -> SimpleXml2array ( $node ) : $node;

        return $out;
    }

Co Wy na to? Największą robotę załatwia nam tu zwykłe rzutowanie obiektu do tablicy. Kolejnym krokiem jest prosta rekurencja, która sprawdza wszystkie właściwości (dawnego) obiektu i jeśli trafi na tablicę lub kolejny obiekt, powtarza wszystko od początku.

    public function SimpleXml2array ( $xmlObject, $out = array () )
    {
        foreach ( (array) $xmlObject as $index => $node )
        {
            if ( $index != '@attributes' )
                $out[$index] = ( is_object ( $node ) || is_array ( $node ) ) ? $this -> SimpleXml2array ( $node ) : $node;
            else
                $out[] = ( is_object ( $node ) || is_array ( $node ) ) ? $this -> SimpleXml2array ( $node ) : $node;
        }

        return $out;
    }

Tutaj zmodyfikowana wersja, która zmienia indeks ‘@attributes’ w zawartość nowej tablicy o indeksie 0 (ZERO).

PS. Pierwszy przykład był próbą odtworzenia oryginalnej postaci funkcji na podstawie snippeta nr 2, co czyniłem pisząc tą notkę. Co za tym idzie kod nie był testowany ;-)