2

我制作了一些 SimpleXMLObject 并将其转换为数组并将它们内爆,但结果不是内爆字符串,而是数组的第一个元素。

更有趣的是它在我的本地服务器中按预期工作,其版本为 5.4.4,但故障发生在我的 php 版本为 5.3.13 的实时服务器中,这就是我的内爆的样子

$im_data = implode( '#', (array)$sync->datas->data);

目标数组如下:

[datas] => SimpleXMLElement Object
    (
        [data] => Array
            (
                [0] => AAzdfAA
                [1] => BBdBB
                [2] => BBDD
                [3] => CCCCzsdfC
            )

    )

但结果不是 AAzdfAA#BBdBB#BBDD#CCCCzsdfC,但我的实时服务器中只有 AAzdfAA。在我的本地服务器中,它按预期工作:AAzdfAA#BBdBB#BBDD#CCCCzsdfC

4

3 回答 3

5

我能够重现您的问题。并使用此解决方法来获得所需的输出:

<?php

$xml = "<xml>
            <datas>
                <data>AAzdfAA</data>
                <data>BBdBB</data>
                <data>BBDD</data>
                <data>CCCCzsdfC</data>
            </datas>
        </xml>";

$sync = simplexml_load_string($xml);

$data = (array)$sync->datas;

$im_data = implode( '#', $data['data']);

echo $im_data; //Outputs: AAzdfAA#BBdBB#BBDD#CCCCzsdfC

希望这可以帮助。

于 2013-06-08T15:03:51.937 回答
1

这里的问题在于如何将 SimpleXML 对象转换为其他类型:首先是在您将对象转换为数组的显式请求中,其次将(希望)返回的对象数组转换为可以处理的字符串由implode.

您需要测试不同的情况,但听起来转换为数组的行为在 PHP 5.4 中发生了变化。为了确保它做正确的事情,手动循环元素而不是依赖演员。

于 2013-06-08T14:35:53.863 回答
0

您可以尝试将 XML 对象转换为数组

<?php
function xml2array ( $xmlObject, $out = array () )
{
        foreach ( (array) $xmlObject as $index => $node )
            $out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;

        return $out;
}

$xml_arr=xml2array($xml_obj);

$im_data = implode( '#',$xml_arr);


?>

我希望它会给你预期的输出

于 2013-06-08T15:03:14.267 回答