多维数组迭代
假设您有以下数组:
$nodes = array(
"parent node",
"parent node",
array(
"child node",
"child node",
array(
"grand child node",
"grand child node")));
您将如何将其转换为 XML 字符串,使其看起来像:
<node>
<node>parent node</node>
<node>parent node</node>
<node>
<node>child node</node>
<node>child node</node>
<node>
<node>grand child node</node>
<node>grand child node</node>
</node>
</node>
</node>
一种方法是通过递归方法,例如:
function traverse($nodes)
{
echo "<node>";
foreach($nodes as $node)
{
if(is_array($node))
{
traverse($node);
}
else
{
echo "<node>$node</node>";
}
}
echo "</node>";
}
traverse($nodes);
不过,我正在寻找一种使用迭代的方法。
Say you have the following array:
$nodes = array(
"parent node",
"parent node",
array(
"child node",
"child node",
array(
"grand child node",
"grand child node")));
How would you go about transforming it to an XML string so that it looks like:
<node>
<node>parent node</node>
<node>parent node</node>
<node>
<node>child node</node>
<node>child node</node>
<node>
<node>grand child node</node>
<node>grand child node</node>
</node>
</node>
</node>
One way to do it would be through a recursive method like:
function traverse($nodes)
{
echo "<node>";
foreach($nodes as $node)
{
if(is_array($node))
{
traverse($node);
}
else
{
echo "<node>$node</node>";
}
}
echo "</node>";
}
traverse($nodes);
I'm looking for an approach that uses iteration, though.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 迭代器 迭代数组,然后生成您想要的输出:
然后像这样组装它:
输出
使用
$key => 时清空
,将其添加到$key
$valTraverseArrayIterator
由于您的目标似乎是生成 XML,因此您还可以将 XMLWriter 作为协作者传递给 Iterator。这允许对生成的 XML 进行更多控制,并确保输出是有效的 XML:
然后您可以像这样使用它:
然后对其进行
foreach
将产生相同的输出(但添加XML 序言)You could use an Iterator to iterate over the array and then produce your desired output:
and then assemble it like this:
outputs
To blank out
$key
when using$key => $val
, add this toTraverseArrayIterator
Since your aim seems to be to produce XML, you could also pass an XMLWriter as a collaborator to the Iterator. This allows for more control over the generated XML and also makes sure the output is valid XML:
You'd then use it like this:
and
foreach
'ing over it will produce the same output then (but adding the XML prolog)