为什么我似乎无法访问多维数组的元素?

Why can't I seem to access elements of a multi dimensional array?

我有一个 XML 文件,该文件已使用 xpath 转换为数组。最终我希望能够访问数组中的变量,但似乎没有任何方法有效。

echo $items['member']['name']; 无效
echo $items['name']; 也不是这个
echo $items['members']['member']['name']; 也不是这个
echo $items[0][0] 也不是这个
echo $items[0] 也不是这个
echo $items[0]['object']['name']也不是这个
$items[0]['name']也不是这个

我不知道问题出在哪里,但我想它可能与 xpath 有关并且它对数组有影响。我知道还有其他类似的线程,但似乎没有资源有帮助。

PHP:

    $xml = simplexml_load_file('XML/profiles.xml'); //Create XML variable from XML file.

    $items = $xml->xpath('member');

    var_dump($items);
    ?>

XML:

    <member>
        <name>AndrewHarvey</name>
        <location>Carleton-Victoria</location>
        <party>L</party>
    </member>

    <member>
        <name>BenoitBourque</name>
        <location>Kent North</location>
        <party>L</party>
    </member>

    <member>
        <name>BernardLeBlanc</name>
        <location>Memramcook-Tantramar</location>
        <party>L</party>
    </member>

    <member>
        <name>BertrandLeBlanc</name>
        <location>Kent North</location>
        <party>L</party>
    </member>

    <member>
        <name>BillFraser</name>
        <location>Miramichi</location>
        <pos>Tourism</pos>
        <pos>Heritage and Culture</pos>
        <pos>Northern and Miramichi Funds</pos>
        <party>L</party>
    </member>
and so on...

$array 的 Var 转储:

array (size=49)  
      0 =>   
      object(SimpleXMLElement)[2]  
      public 'name' => string 'AndrewHarvey' (length=12)  
      public 'location' => string 'Carleton-Victoria' (length=17)  
      public 'party' => string 'L' (length=1)  
  1 =>   
    object(SimpleXMLElement)[3]  
      public 'name' => string 'BenoitBourque' (length=13)  
      public 'location' => string 'Kent North' (length=10)  
      public 'party' => string 'L' (length=1)  
  2 => 
    object(SimpleXMLElement)[4]
      public 'name' => string 'BernardLeBlanc' (length=14)
      public 'location' => string 'Memramcook-Tantramar' (length=20)
      public 'party' => string 'L' (length=1)
  3 => 
    object(SimpleXMLElement)[5]
      public 'name' => string 'BertrandLeBlanc' (length=15)
      public 'location' => string 'Kent North' (length=10)
      public 'party' => string 'L' (length=1)
  4 => 
    object(SimpleXMLElement)[6]
      public 'name' => string 'BillFraser' (length=10)
      public 'location' => string 'Miramichi' (length=9)
      public 'pos' => 
        array (size=3)
          0 => string 'Tourism' (length=7)
          1 => string 'Heritage and Culture' (length=20)
          2 => string 'Northern and Miramichi Funds' (length=28)
and so on...

您的数组是对象数组,因此您需要 -> 才能访问它们。使用 foreach 可以访问数组。

foreach($items as $val){
    echo $val->name;
    echo $val->location;
    echo $val->party;
}

试试这个,然后告诉我。如果数组中还有其他内容,您需要以类似的方式进行操作。

要添加 Frayne Konok 发表的评论,您可以像这样访问这些值: $name = array[0] -> name;

您也可以按以下方式循环遍历它们中的每一个:

foreach ($node as $index => $data)
{
   $name = $data -> name;
   $location = $data -> location;

   if (property_exists($data, 'party'))
   { $party = $data -> party; }       

   if (property_exists($data, 'pos'))
   { $pos_attr = $data -> pos[0]; }
}

这里有一点免责声明...我没有对此进行测试,因此您可能想尝试一下,但您明白了。

var_dump 顶部的 array 表示外部包装是一个数组,需要像数组一样访问。每个条目下面的 object(SimpleXMLElement) 表示该数组中的项目是对象,必须这样访问。在poc属性下的array(size=3)表示它是一个数组。你可以看到我要去哪里。使用括号表示法 array[0]array['example'] 访问数组,使用箭头表示法 object -> nameobject -> {'0'} 访问对象(在奇数情况下)。

SimpleXMLElement::xpath() 总是 returns SimpleXMLElement 个对象的数组。它不是多维或嵌套数组。然而 SimpleXMLElement 实现了很多语法糖。其中之一是属性的数组语法。

$element = new SimpleXMLElement('<foo attr="bar"/>');
echo $element['attr'];

但是要访问子节点,需要使用对象语法。

$xml = simplexml_load_file('XML/profiles.xml');

foreach ($xml->xpath('member') as $member) {
  echo $member->name;
}

SimpleXMLElementvar_dump() 输出不是实际对象的 full/correct 表示,因为语法糖。例如,您也可以迭代 SimpleXMLElement 属性。

$xml = simplexml_load_file('XML/profiles.xml');

foreach ($xml->member as $member) {
  echo $member->name;
}