首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SimpleXMLElement上的foreach循环不起作用,结果只有1个元素

SimpleXMLElement上的foreach循环不起作用,结果只有1个元素
EN

Stack Overflow用户
提问于 2017-04-05 18:56:04
回答 4查看 2.8K关注 0票数 1

我有一个xml文件,其结构如下:

代码语言:javascript
复制
$xmlString = '
  <plist>
    <categories>
      <category>
        <id>1</id>
        <parent>0</parent>
        <description><![CDATA[Test 1]]></description>
      </category>
      <category>
        <id>2</id>
        <parent>1</parent>
        <description><![CDATA[Test 1.1]]></description>
      </category>
      <category>
        <id>3</id>
        <parent>1</parent>
        <description><![CDATA[Test 1.2]]></description>
      </category>
      </categories>
  </plist>';

现在我尝试这样构建一个数组:

代码语言:javascript
复制
$xmlData = new SimpleXMLElement($xmlString);

$results = [];

foreach($xmlData->categories->category as $key => $category){
  $results[$key]['id']       = isset($category->id) ? (string)$category->id : false;
  $results[$key]['parentId'] = isset($category->parent) ? (string)$category->parent : false;
  $results[$key]['name']     = isset($category->description) ? (string)$category->description : false;
}

echo '<pre>'.print_r($results,true).'</pre>';

但结果只是最后一个条目:

代码语言:javascript
复制
Array
(
  [category] => Array
    (
      [id] => 3
      [parentId] => 1
      [name] => Test 1.2
    )

)

SimpleXMLElement对象如下所示:

代码语言:javascript
复制
SimpleXMLElement Object
(
  [categories] => SimpleXMLElement Object
    (
      [category] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [id] => 1
                    [parent] => 0
                    [description] => SimpleXMLElement Object
                        (
                        )

                )

            [1] => SimpleXMLElement Object
                (
                    [id] => 2
                    [parent] => 1
                    [description] => SimpleXMLElement Object
                        (
                        )

                )

            [2] => SimpleXMLElement Object
                (
                    [id] => 3
                    [parent] => 1
                    [description] => SimpleXMLElement Object
                        (
                        )

                  )

            )

      )

)

所以类别是一个数组,我不明白为什么foreach循环不能工作。关键字应该是1,2,3还是不是?

EN

Stack Overflow用户

发布于 2017-04-05 19:03:45

好的,这是一个没有计数器但有简单[]的答案

代码语言:javascript
复制
foreach($xmlData->categories->category as $category){
    $results[] = array(
        'id' => isset($category->id) ? (string)$category->id : false,
        'parentId' => isset($category->parent) ? (string)$category->parent : false,
        'name' => isset($category->description) ? (string)$category->description : false,
    );
}
票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43229159

复制
相关文章

相似问题

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