Php 为simplexmlements数组编写foreach循环

Php 为simplexmlements数组编写foreach循环,php,multidimensional-array,simplexml,Php,Multidimensional Array,Simplexml,我使用PHP5中的XPath解析XML文档。我遇到的问题是编写foreach以正确显示以下数组: XML文档示例 值1 价值2 //$row的var_转储提供了以下内容 理想情况下,我希望通过使用$row['file']或$row['folder']获得值。谢谢您的帮助。如果我正确理解了您的示例 foreach ($array as $row) { // do something with $row['file'] or $row['folder'] } 数组中的项是SimpleX

我使用PHP5中的XPath解析XML文档。我遇到的问题是编写
foreach
以正确显示以下数组:

XML文档示例

值1 价值2

//$row的var_转储提供了以下内容


理想情况下,我希望通过使用
$row['file']
$row['folder']
获得值。谢谢您的帮助。

如果我正确理解了您的示例

foreach ($array as $row)
{
    // do something with $row['file'] or $row['folder']
}

数组中的项是SimpleXMLElement对象。您可以使用
$object->property
语法访问它们的属性。所以试试这个:

foreach ($array as $row) {
    echo $row->folder . $row->file;
}

如果只想处理一个元素,则不一定需要循环,但也不会有任何影响。
根据您的输出
文件
文件夹
是为xpath查询返回的元素的子元素。您可以通过
$parentElement->childElement
访问它们。如果它们是属性,您将使用
$element['attributeName']

$foo = new SimpleXMLElement(getData());

foreach( $foo->xpath('row[@id="r2"]') as $row ) {
  echo $row->file, " | ", $row->folder, "\n";
}
echo "-----\n";

// same thing if you have more than one element in your result set
foreach( $foo->xpath('row[@id="r2" or @id="r3"]') as $row ) {
  echo $row->file, " | ", $row->folder, "\n";
}

function getData() {
  return '<foo>
    <row id="r1">
      <file>value 1.1</file>
      <folder>value 1.2</folder>
    </row>
    <row id="r2">
      <file>value 2.1</file>
      <folder>value 2.2</folder>
    </row>
    <row id="r3">
      <file>value 3.1</file>
      <folder>value 3.2</folder>
    </row>
  </foo>';
}

@mjames,这个作业有关系吗?实际上是为了我正在创作的一个剧本。酷。。。只是检查一下,标题似乎有点“家庭作业”的味道。我实际上有一个不同的标题,但被版主更改了:)谢谢,我没有意识到我必须在对象窗体->文件而不是['file]中使用它。现在效果很好:)
foreach ($array as $row) {
    echo $row->folder . $row->file;
}
$foo = new SimpleXMLElement(getData());

foreach( $foo->xpath('row[@id="r2"]') as $row ) {
  echo $row->file, " | ", $row->folder, "\n";
}
echo "-----\n";

// same thing if you have more than one element in your result set
foreach( $foo->xpath('row[@id="r2" or @id="r3"]') as $row ) {
  echo $row->file, " | ", $row->folder, "\n";
}

function getData() {
  return '<foo>
    <row id="r1">
      <file>value 1.1</file>
      <folder>value 1.2</folder>
    </row>
    <row id="r2">
      <file>value 2.1</file>
      <folder>value 2.2</folder>
    </row>
    <row id="r3">
      <file>value 3.1</file>
      <folder>value 3.2</folder>
    </row>
  </foo>';
}
value 2.1 | value 2.2
-----
value 2.1 | value 2.2
value 3.1 | value 3.2