首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Simplexml元素只提取第一个元素,但我需要所有元素

Simplexml元素只提取第一个元素,但我需要所有元素
EN

Stack Overflow用户
提问于 2012-12-15 21:15:12
回答 1查看 1.3K关注 0票数 1

我有这样的XML结构:

代码语言:javascript
复制
<response status="success">
<campaign>
 <id>1</id>
 <nameCampaign>Raccolta Punti CCN</nameCampaign>
 <type>points</type>
 <balances>
     <balance>10.00 </balance>
  </balances>
 </campaign>
 <campaign>
 <id>6</id>
 <nameCampaign>Abbonamenti</nameCampaign>
 <type>subscription</type>
  <balances>
    <balance>6.00 Lampada solare</balance>
  </balances>
  <balances>
   <balance>4.00 doccia solare</balance>
  </balances>
  <balances>
     <balance>3.00 trifacciale</balance>
  </balances>
 </campaign>
</response>

我需要数组中的转换。

如果我使用

代码语言:javascript
复制
 foreach($result->campaign as $bilancio) {
    $balance[] = array  (   'nameCampaign'  =>  (string)$bilancio->nameCampaign,
                            'balances'      =>  (string)$bilancio->balances->balance    );      
} // foreach

我获得了这个数组

代码语言:javascript
复制
    Array
  (
[0] => Array
    (
        [nameCampaign] => Raccolta Punti CCN
        [balances] => 10.00 
    )

[1] => Array
    (
        [nameCampaign] => Abbonamenti
        [balances] => 6.00 Lampada solare
    )
  )

您怎么会注意到,id6有三个子节点(balance->balance),而不是只有一个。如何获得完整的数组?

谢谢大家,祝大家周末愉快!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-15 22:12:37

您可以使用foreach遍历所有元素,而不是读取(只使用simeplxml会给出第一个元素)。

这里有一种方法:

代码语言:javascript
复制
$balance = array();
foreach ($result->campaign as $campaign)
{
    $arr = array();
    foreach ($campaign->balances as $campaignBalance)
    {
        $arr[] = (string) $campaignBalance->balance;
    }

    $balance[] = array(
        'nameCampaign' => (string) $campaign->nameCampaign,
        'balances'     => $arr
    );
}

print_r($balance);

这将为您提供以下结果:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [nameCampaign] => Raccolta Punti CCN
            [balances] => Array
                (
                    [0] => 10.00
                )
        )
    [1] => Array
        (
            [nameCampaign] => Abbonamenti
            [balances] => Array
                (
                    [0] => 6.00 Lampada solare
                    [1] => 4.00 doccia solare
                    [2] => 3.00 trifacciale
                )
        )
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13892508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档