simpleXMLElement

<?php
// declare data
$data = &#91;
    'Taro'=>['age'=>30, 'hobby'=>['Guitar','Piano']],
    'Takeshi'=>['age'=>18, 'hobby'=>['Reading']],
    'Arisa'=>['age'=>16, 'hobby'=>['Walking','Tea']],
    'Sara'=>['age'=>22, 'hobby'=>['Sleeping']]
    ];
    // saving file pass
    $file = "serialize-test.xml";

    // transfer function from php array to XML
    function array2xml($arr, $xml_obj = NULL) {
        if ($xml_obj == NULL){
            $def = '<?xml version="1.0"?><root></root>';
        $xml_obj = new SimpleXMLElement($def);
        }
        foreach($arr as $key => $value){
        if (is_numeric($key)) $key = "item";
            if (is_array($value)){
                $subnode = $xml_obj->addChile($key);
                array2xml($value, $subnode);
            } else {
                $v = htmlentities($value);
                $xml_obj->addChild($key, $v);
            }
        }
    return $xml_obj;
    }

// transfer array to object
$xml_obj = array2xml($data);
$str = $xml_obj->asXML();
// save to file
file_put_contents($file, $str);

// read from file
$xml2 = simplexml_load_file($file);
foreach ($xml2->children() as $it){
    $name = $it->getName();
    $age = $it->age;
    echo "$name:$age:";
    $hobby = $it->hobby;
    foreach ($hobby->children() as $h){
        echo "($h)";
    }
    echo "\n";
}