php 数据转换XML 输出XML

180it 2020-02-20 AM 1647℃ 0条
/**
 * 输出XML
 *
 * @param mixed $data 数据
 * @param bool $push (true: echo & die | false: return) 是否立即显示并终止程序
 * @param bool $indent 是否格式化缩进
 * @param string $root 根标签名称
 * @param array $attr 根标签属性数组
 * @param string $item 项目标签名称
 * @param string $id 当数据为索引数组时,项目标签属性的名称
 * @param string $encoding 编码
 * @return string
 */
function pushXml($data, $push = true, $indent = false, $root = 'data', $attr = [], $item = 'item', $id = 'id', $encoding = 'utf-8')
{
    $eol = ($indent === true) ? PHP_EOL : '';

    $_attr = '';
    foreach ($attr as $key => $val) {
        $_attr .= ' ' . $key . '="' . $val . '"';
    }

    $xml = '<?xml version="1.0" encoding="' . $encoding . '"?>' . $eol;
    $xml .= '<' . $root . $_attr . '>' . $eol;
    $xml .= parseDataToXml($data, $item, $id, $indent);
    $xml .= '</' . $root . '>';

    if ($push === true) {
        echo $xml;
        die();
    }

    return $xml;
}

/**
 * 数据转换XML
 *
 * @param mixed $data
 * @param string $item
 * @param string $id
 * @param string $indent
 * @param int $level
 * @return string
 */
function parseDataToXml($data, $item = 'item', $id = 'id', $indent = false, $level = 1)
{
    $eol = ($indent === true) ? PHP_EOL : '';
    $space = ($indent === true) ? str_repeat('  ', $level) : '';

    $xml = $attr = '';

    if (empty($data)) {
        return $xml;
    }

    foreach ($data as $key => $val) {
        if (is_int($key) && $key >= 0) {
            if (! empty($id)) {
                $attr = ' ' . $id . '="' . $key . '"';
            }

            $key = $item;
        }

        $xml .= $space . '<' . $key . $attr . '>';

        if (is_array($val) || is_object($val)) {
            $level ++;
            $xml .= $eol . parseDataToXml($val, $item, $id, $indent, $level);
            $level --;
            $xml .= $space . '</' . $key . '>' . $eol;
        } else {
            $xml .= $val;
            $xml .= '</' . $key . '>' . $eol;
        }
    }

    return $xml;
}
支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

php 数据转换XML 输出XML