PHP:从simplexml数组中获取特定值

时间:2013-08-04 11:34:20

标签: php arrays simplexml

我是PHP的新手,希望你可以帮助我。 搜索论坛并没有帮助我找到我的具体问题的答案。

我有一个带有simplexml数组的PHP页面,如下所示,只是更长的时间:

    SimpleXMLElement Object 
    ( 
       [textID] => Array 
                ( 
                   [0] => SimpleXMLElement Object 
                       ( 
                          [textID] => 1 
                          [content] => Text1 
                       ) 
                   [1] => SimpleXMLElement Object 
                       ( 
                          [textID] => 2 
                          [content] => Text2
                       ) 
                   [2] => SimpleXMLElement Object 
                       ( 
                          [textID] => 3 
                          [content] => Text3 
                       ) 
                )
      )

现在我试图通过引用它的整数ID来回显这个数组中的特定值。 我得到这个工作的唯一方法是以下,但这只是数组中的顺序,而不是实际的ID:

    <?php echo $objTexts->textID[1]->content; ?>

有人可以告诉我这里缺少什么吗?

谢谢,蒂姆

1 个答案:

答案 0 :(得分:1)

SimpleXML无法知道textID标识哪个节点是哪个节点 - 它只是XML中的另一个元素。

根据您的示例输出,您的XML有点令人困惑,因为您有多个名为textID的元素,每个元素都有一个子节点,也称为textID,它具有不同的含义。尽管如此,您可以通过循环遍历所有外部textID元素并测试其内部textID元素的值来实现您想要做的事情:

foreach ( $objTexts->textID as $item )
{
     if ( $item->textID == '2' )
     {
          ...
     }
}

或者,您可以使用XPath,这是一种非常简单的XML查询语言,并且在the ->xpath() method形式的SimpleXML中受支持。在您的情况下,您希望找到一个textID节点,其中包含具有特定值的textID子节点,因此代码看起来像这样:

 // ->xpath always returns a plain PHP array - not a SimpleXML object
 $xpath_results = $objTexts->xpath('//textID[textID=2]');

 // If you're certain you only want the first result:
 echo $xpath_results[0]->content;

 // If you might want multiple matches
 foreach ( $xpath_results as $item )
 {
     ...
 }