序列化 / XML

<?php

//github.com/adamplumb/XMLSerializer
//A minimal version of the class
class XMLSerializer {
    private $root;
    private $indent;

    function __construct($root = "root", $indent = "    ") {
        $this->root = $root;
        $this->indent = $indent;
    }

    function serialize($data) {
        return $this->tag($this->root, $data, 0);
    }

    private function tag($name, $value, $level) {
        if (is_object($value)) {
            $value = (array)$value;
        }
        $pad = str_repeat($this->indent, $level);
        $eol = $this->indent === "" ? "" : "\n";
        if (is_array($value)) {
            //a list is a repeated tag, not a nested one
            if (array_is_list($value) && $value !== []) {
                $items = "";
                foreach ($value as $item) {
                    $items .= $this->tag($name, $item, $level);
                }
                return $items;
            }
            $body = "";
            foreach ($value as $key => $item) {
                $body .= $this->tag($key, $item, $level + 1);
            }
            return "$pad<$name>$eol$body$pad</$name>$eol";
        }
        return "$pad<$name>" . htmlspecialchars((
                          string)$value) . "</$name>$eol";
    }
}

class Data {
    public $nums = [];
}

$data = new Data();
$data->nums = [2357];

$serializer = new XMLSerializer('data');
$data_s = $serializer->serialize((array)$data);
//<data>
//    <nums>2</nums>
//    <nums>3</nums>
//    <nums>5</nums>
//    <nums>7</nums>
//</data>

echo "data_s is ", $data_s;