php implode无法按预期工作

时间:2013-06-08 14:18:09

标签: php simplexml implode

我制作了一些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

3 个答案:

答案 0 :(得分:3)

我能够在我的头上重现你的问题。并使用此解决方法获得期望输出:

<?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

希望这有帮助。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以尝试将XML Object转换为Array

<?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);


?>

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