数组转xml,为什么不生效,返回结果是一堆字符串,拼接完全没有

//数组转xml
    protected function arrayToXml($arr)
    {
        $xml = "";
        foreach ($arr as $key => $val) {
            if (is_numeric($val)) {
                $xml .= "<" . $key . ">" . $val . " . $key . ">";
            } else {
                $xml .= "<" . $key . ">" . $val . " . $key . ">";
            }
        }
        $xml .= "";
        return $xml;
    }

根据您提供的代码,可能会出现以下几个问题导致转换结果不正确:

  1. XML拼接错误:在数组中的每个键值对中,都需要将键作为标签名,而将值作为标签的文本内容。可以使用$key作为标签名,以及将$val作为文本内容。

  2. 数字字符串问题:在您的代码中,使用is_numeric()函数来判断值是否为数字,但是在拼接XML时,并没有对数字字符串进行特殊处理。可以考虑使用ctype_digit()函数来判断是否为纯数字字符串,并使用CDATA标记将其包裹起来,以避免XML解析问题。

  3. 多维数组问题:如果数组是多维的,您的代码中只考虑了一维数组的情况。如果数组是嵌套的,您可能需要递归地处理子数组。

下面是修改后的代码示例,可以将数组正确转换为XML:

protected function arrayToXml($arr)
{
    $xml = "<xml>";
    foreach ($arr as $key => $val) {
        if (is_array($val)) {
            $xml .= "<" . $key . ">" . $this->arrayToXml($val) . "</" . $key . ">";
        } else {
            if (is_numeric($val) && !ctype_digit($val)) {
                $xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
            } else {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            }
        }
    }
    $xml .= "</xml>";
    return $xml;
}