[英]PHP create array from xml with recursive method
需要實現一個遞歸 function 也可以接受第二個子節點,我試圖循環第二個 foreach 但我無法實現。 也許我錯過了一些東西,想知道是否有人通過這個:
代碼是:
function runXml() {
$content1 = <<< XML
<data>
<users>
<user>
<name>myName</name>
<email>myEmail</email>
<address>MyAddres - City - Country</address>
</user>
<user>
<name>myName2</name>
<email>myEmail2</email>
<address>MyAddres2 - City - Country</address>
</user>
</users>
</data>
XML;
$content2 = <<< XML
<users>
<user>
<name>myName</name>
<email>myEmail</email>
<address>MyAddres - City - Country</address>
</user>
<user>
<name>myName2</name>
<email>myEmail2</email>
<address>MyAddres2 - City - Country</address>
</user>
</users>
XML;
echo '<pre>';
$xml1 = simplexml_load_string($content1);
print_r($this->processFeedXmlWithoutAttributes($xml1));
$xml2 = simplexml_load_string($content2);
print_r($this->processFeedXmlWithoutAttributes($xml2));
}
function processFeedXmlWithoutAttributes($xml)
{
$output = array();
try {
if($xml->children()) {
$children = $xml->children();
if(count($children) > 0) {
foreach($children as $child) {
$output[] = $child;
}
}
}
} catch (Exception $e) {
}
return $output;
}
結果是:
Array
(
[0] => SimpleXMLElement Object
(
[user] => Array
(
[0] => SimpleXMLElement Object
(
[name] => myName
[email] => myEmail
[address] => MyAddres - City - Country
)
[1] => SimpleXMLElement Object
(
[name] => myName2
[email] => myEmail2
[address] => MyAddres2 - City - Country
)
)
)
)
Array
(
[0] => SimpleXMLElement Object
(
[name] => myName
[email] => myEmail
[address] => MyAddres - City - Country
)
[1] => SimpleXMLElement Object
(
[name] => myName2
[email] => myEmail2
[address] => MyAddres2 - City - Country
)
)
所需的結果是 xml 的兩種結構:
Array
(
[0] => SimpleXMLElement Object
(
[name] => myName
[email] => myEmail
[address] => MyAddres - City - Country
)
[1] => SimpleXMLElement Object
(
[name] => myName2
[email] => myEmail2
[address] => MyAddres2 - City - Country
)
)
對於我有“”用戶索引的第一個結構被添加並創建了一個多維數組,我們的想法是擺脫該索引並讓數組稍后迭代。
任何幫助表示贊賞!
問題在於user
節點在這兩種情況下都應該是根。
為了實現它 - 您可以從此節點開始解析 XML。 processFeedXmlWithoutAttributes
方法的可能解決方案:
function processFeedXmlWithoutAttributes(\SimpleXMLElement $xml): array
{
$output = [];
try {
while ($xml->getName() !== 'user') {
$xml = $xml->children();
}
foreach ($xml as $child) {
$output[] = $child;
}
} catch (Exception $e) {
}
return $output;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.