Php 是否在foreach循环中保存更改?
假设以下xml文档: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 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();