我制作了一些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
答案 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);
?>
我希望它会给你预期的输出