解析 XML 文档后循环遍历关联数组
Loop through an Associative Arrays after parsing an XML document
我使用 Class 来解析 XML 文件。 XML-文件看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<user>
<name id="1">John Mal</name>
<addr>123 N 45</addr>
<phone id="5">555.55.222</phone>
</user>
解析的结果是一个关联数组:
Array (
[0] => Array (
[name] => USER
[content] =>
[child] => Array(
[0] => Array(
[name] => NAME
[attrs] => Array([ID] => 1)
[content] => John Mal
)
[1] => Array(
[name] => ADDR
[content] => 123 N 45
)
[2] => Array(
[name] => PHONE
[attrs] => Array([ID] => 5)
[content] => 555.55.222
)
)
)
)
我的问题是如何遍历数组,获取里面的信息。例如,我想在单独的行中获取第一个 id
和 name
标签的内容,因为之后我想将所有信息写入文本文件。怎么做?非常感谢任何帮助。
该解析函数看起来对您要实现的目标没有特别用处。
您 可能 对 SimpleXML 感兴趣。
<?php
$user = new SimpleXMLElement(data());
echo 'name=', $user->name,' id=', $user->name['id'], PHP_EOL;
echo 'addr=', $user->addr, PHP_EOL;
echo 'phone=', $user->phone,' id=', $user->phone['id'], PHP_EOL;
function data() {
return <<< eox
<?xml version="1.0" encoding="utf-8"?>
<user>
<name id="1">John Mal</name>
<addr>123 N 45</addr>
<phone id="5">555.55.222</phone>
</user>
eox;
}
我会投票支持像 DOM
或 SimpleXml
这样的解析器,因为它具有数组的强大功能。如果你必须使用数组......
这是直接访问复杂数组中特定数据的方法:
var_dump($a[0]['child'][0]['content']);
输出:
string(8) "John Mal"
迭代次数:
foreach ($a as $set) {
echo $set['name'] . PHP_EOL;
echo $set['content'] . PHP_EOL;
echo "----------------" . PHP_EOL;
foreach ($set['child'] as $item) {
foreach ($item as $key => $value) {
echo "$key: $value" . PHP_EOL;
}
}
}
输出:
USER
CONTENT
----------------
name: NAME
attrs: Array
content: John Mal
name: ADDR
content: 123 N 45
name: PHONE
attrs: Array
content: 123.345
查看实际效果并试用它:https://eval.in/530409
我使用 Class 来解析 XML 文件。 XML-文件看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<user>
<name id="1">John Mal</name>
<addr>123 N 45</addr>
<phone id="5">555.55.222</phone>
</user>
解析的结果是一个关联数组:
Array (
[0] => Array (
[name] => USER
[content] =>
[child] => Array(
[0] => Array(
[name] => NAME
[attrs] => Array([ID] => 1)
[content] => John Mal
)
[1] => Array(
[name] => ADDR
[content] => 123 N 45
)
[2] => Array(
[name] => PHONE
[attrs] => Array([ID] => 5)
[content] => 555.55.222
)
)
)
)
我的问题是如何遍历数组,获取里面的信息。例如,我想在单独的行中获取第一个 id
和 name
标签的内容,因为之后我想将所有信息写入文本文件。怎么做?非常感谢任何帮助。
该解析函数看起来对您要实现的目标没有特别用处。
您 可能 对 SimpleXML 感兴趣。
<?php
$user = new SimpleXMLElement(data());
echo 'name=', $user->name,' id=', $user->name['id'], PHP_EOL;
echo 'addr=', $user->addr, PHP_EOL;
echo 'phone=', $user->phone,' id=', $user->phone['id'], PHP_EOL;
function data() {
return <<< eox
<?xml version="1.0" encoding="utf-8"?>
<user>
<name id="1">John Mal</name>
<addr>123 N 45</addr>
<phone id="5">555.55.222</phone>
</user>
eox;
}
我会投票支持像 DOM
或 SimpleXml
这样的解析器,因为它具有数组的强大功能。如果你必须使用数组......
这是直接访问复杂数组中特定数据的方法:
var_dump($a[0]['child'][0]['content']);
输出:
string(8) "John Mal"
迭代次数:
foreach ($a as $set) {
echo $set['name'] . PHP_EOL;
echo $set['content'] . PHP_EOL;
echo "----------------" . PHP_EOL;
foreach ($set['child'] as $item) {
foreach ($item as $key => $value) {
echo "$key: $value" . PHP_EOL;
}
}
}
输出:
USER
CONTENT
----------------
name: NAME
attrs: Array
content: John Mal
name: ADDR
content: 123 N 45
name: PHONE
attrs: Array
content: 123.345
查看实际效果并试用它:https://eval.in/530409