从xml构建关联数组时出现问题


Trouble building associative array from xml

我正试图从XML构建一个关联数组。以下是xml的样子(总共大约70个"item"条目):

<xmldata>
<source>source</source>
<release>release</release>
 <item>
  <name>Name</name>
  <date>1/1/2015</date>
  <time>10AM</time>
  <value>24</value>
 </item>
 <item>
  <name>Name</name>
  <date>1/1/2015</date>
  <time>10AM</time>
  <value>24</value>
 </item>
etc
...
</xmldata>

以下是我迄今为止所尝试的:

$data = file_get_contents("xml url");
$xml = simplexml_load_string($data);
$counter = 1;
$new_array = array();
foreach($xml->children() as $item)
{
  if($counter > 2)
  {
    $temp_array = array('name' => $item->name, 'value' => $item->value);
    array_push($newArray, $temp_array);
  }
}

我正在尝试构建一个看起来像这样的关联数组:

$new_array = array(array("name"=>name, "value"=>value),array("name"=>name,  "value"=>value),array("name"=>name, "value"=>value), etc);

它不起作用。我试图打印数组以查看它是否已形成,但我得到了0数组、1数组等的列表。

我也试过array_merge(), and $new_array[] = $item, and array_push($new_array, array("name"=>name, "value"=>value));

有没有一种将关联数组附加到数组上的首选方法?如python中的array.append(dict)?非常感谢!

像一样尝试

$data = file_get_contents("xml url");
$xml = simplexml_load_string($data);
$counter = 1;
$new_array =[];
foreach($xml->children() as $item)
{
    $new_array[$counter]['name'] = $item->name;
    $new_array[$counter]['value'] = $item->value;
    $counter += 1;              
}

将xml中每个<item>中的namevalue添加到数组的一个可能的解决方案是首先检查$item->getName()是否为"item"。

然后可以使用array_push向$new_array添加一个新数组。

例如:

$data = file_get_contents('xml url');
$xml = simplexml_load_string($data);
$new_array = array();
foreach($xml->children() as $item) {
    if ($item->getName() === "item") {
        array_push(
            $new_array, [
                "name" => $item->name->__toString(),
                "value" => $item->value->__toString()
            ]
        );
    }
}
var_dump($new_array);

将导致:

array (size=2)
  0 => 
    array (size=2)
      'name' => string 'Name' (length=4)
      'value' => string '24' (length=2)
  1 => 
    array (size=2)
      'name' => string 'Name' (length=4)
      'value' => string '24' (length=2)