Php 是否在foreach循环中保存更改?

Php 是否在foreach循环中保存更改?,php,xml,object,foreach,Php,Xml,Object,Foreach,假设以下xml文档: <?xml version="1.0"?> <technicaldata template="123"> <name> <![CDATA[Blub1]]> </name> <numbers> <![CDATA[1 2 3 4 5]]> <

假设以下xml文档:

<?xml version="1.0"?>
<technicaldata template="123">
    <name>
        <![CDATA[Blub1]]>
    </name>
    <numbers>
        <![CDATA[1
            2
            3
            4
        5]]>
    </numbers>
    <shortinfo>
        <![CDATA[ha ha ha ha ha ha ha ha.]]>
    </shortinfo>
    <detailedinfo>
        <![CDATA[hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi
        hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi ]]>
    </detailedinfo>
</technicaldata>
之后,我想替换xml文件所有部分中的一些特定字母-例如,所有bar外观都应该替换为foo。。。 感谢这个伟大的社区,我知道它与这样的循环一起工作:

foreach ($inhalt->children() as $child) {
    $child= str_ireplace('bar', 'foo',$child);
}
问题是如果我现在去 $inhalt->shortinfo它工作起来并不困难

但是如果我用这样的回音循环

foreach ($inhalt->children() as $child) {
    $child= str_ireplace('bar', 'foo',$child);
    echo $child;
}
然后,替换显然起了作用,但不幸的是,当forech循环完成时,更改丢失了; 我怎样才能避免呢? 非常感谢!!:)


编辑:对不起,我说的是php…:)

关于
SimpleXml
的隐藏功能已经说了很多,下面是如何做到这一点:

$inhalt = simplexml_load_string($x); // assume XML in $x

foreach ($inhalt->children() as $child) {
    $child[0] = str_ireplace('bar', 'foo', $child);
}

echo $inhalt->asXML();
请注意
foreach
循环中的自引用
$child[0]

这项技术有几个解释得很好的答案,请参阅


请参见上面的代码工作:

在循环中使用引用:
foreach(…as&$child).
注意
&
。嘿。。谢谢你的帮助。。。不幸的是,在这样做的过程中,我犯了一个错误;致命错误:迭代器不能与C:\xampp\htdocs\getxmldata.php中的foreach by reference一起使用,第12Ah行是-xml with simple xml——我刚才看到了循环。。。;如果要修改xml文档,我建议使用DOM-API。所以没有机会用simplexml实现它?因为整个脚本已经建立在它的基础上…可能是
$inhalt = simplexml_load_string($x); // assume XML in $x

foreach ($inhalt->children() as $child) {
    $child[0] = str_ireplace('bar', 'foo', $child);
}

echo $inhalt->asXML();