Serialization



  • Hallo,

    ich muss serializierten String in eine MySQL Datenbank speichern. Bin nun am überlegen, wie ich das realisieren kann und ob das im C++ (gcc linux) überhaupt so möglich ist wie im PHP. Ich hoffe mir kann da jemand weiterhelfen.

    PHP:
    -------

    $a = array(

    'KUNDEN' => array(
    '0' => array(
    'WERT1' => 'Franz',
    'WERT2' => 'Mustermann'
    ),
    '1' => array(
    'WERT1' => 'Susann',
    'WERT2' => 'Musterfrau'
    )
    ),

    'TIERE' => array(
    '0' => array(
    'WERT1' => 'Hund',
    'WERT2' => 'Blacky'
    ),
    '1' => array(
    'WERT1' => 'Katze',
    'WERT2' => 'Domina'
    )
    )

    );
    echo serialize($a);

    Serialize - welcher in die DB geschreiben werden muss:
    a:2:{s:6:"KUNDEN";a:2:{i:0;a:2:{s:5:"WERT1";s:5:"Franz";s:5:"WERT2";s:10:"Mustermann";}i:1;a:2:{s:5:"WERT1";s:6:"Susann";s:5:"WERT2";s:10:"Musterfrau";}}s:5:"TIERE";a:2:{i:0;a:2:{s:5:"WERT1";s:4:"Hund";s:5:"WERT2";s:6:"Blacky";}i:1;a:2:{s:5:"WERT1";s:5:"Katze";s:5:"WERT2";s:6:"Domina";}}}

    ----------------------------------------------------------------------------

    Doch wie kann ich unter C++ ein Array serializieren (serialization von Boost??), wobei es ja auch unter c++ keine assoziierte arrays gibt. Irgendwie befürchte ich, das könnte ein größeres Problem werden.



  • Klar gibt es unter C++ assoziative Arrays - die nennen sich "map<>". Und zur Serialisierung mußt du nur Schlüssel und Wert aller Elemente so unterbringen, daß du sie später wieder auslesen kannst - dabei kannst du dich durchaus an dem PHP-Ansatz orientieren.



  • okay map<> kann ich verwenden stimmt. Das Problem besteht allerdings darin, dass der gespeicherte serialisierte String auch von PHP wieder ausgelesen werden muss. Also das Format des Strings gleich dem von PHP sein muss.



  • Das lässt sich einrichten - du mußt nur das PHP-Format nachbilden. Die Größe einer map<> bekommst du über size(), die einzelnen Elemente über Iteratoren (Schlüssel und Wert sind zu einem pair<> zusammengefasst). Der Rest ist halt eine Frage des Formats.


Anmelden zum Antworten