我有一个数组如下:
array(
'items' => array(
'item' => array(
(int) 0 => array(
'@item' => '3-394-001068-00000'),
(int) 1 => array(
'@item' => '3-394-001069-00000'),
)
)
)
我正在尝试将所有'item'条目提取到一个新数组。
到目前为止,这是我的代码:
$xmlarray = Xml::toArray(Xml::build(WWW_ROOT .'files/itemsAll/'.$file));
debug($xmlarray);
$results = Hash::extract($xmlarray, '{n}.item');
debug ($results);
但这只返回一个空数组。 有人可能会给我一个暗示我出错的地方吗?
提前致谢
答案 0 :(得分:2)
你的问题并不清楚,但我假设这个数组
array(
'items' => array(
'item' => array(
(int) 0 => array(
'@item' => '3-394-001068-00000'),
(int) 1 => array(
'@item' => '3-394-001069-00000'),
是您debug($xmlarray);
的结果,因此我们可以排除文件的错位(如果我假设错了,请告诉)。
所以,哈希是你的问题。
根据docs,{n}
指的是"数字键"和"项"显然不是。如果你想提取所有"项目"在" items",它应该是
Hash::extract($xmlarray, 'items.item');
那会给你
array((int) 0 => array(
'@item' => '3-394-001068-00000'),
(int) 1 => array(
'@item' => '3-394-001069-00000'),
/*etc*/
并且,如果你想要一个非常紧凑的数组(不知道你是否需要索引关联),你可以尝试
Hash::extract($xmlarray, 'items.item.{n}.@item');
那会让你
array('3-394-001068-00000', '3-394-001069-00000')
答案 1 :(得分:0)
首先,有更好的方法从XML文件中提取信息,而不是转换为数组然后使用Hash::extract()
。 Cake的XML library默认返回一个SimpleXML对象,因此read up on the docs on that用于直接从XML中提取信息。具体来说,xpath
方法可能对您有用。您的使用可能如下所示:
<?php
$xmlobj = Xml::build(WWW_ROOT .'files/itemsAll/'.$file);
$items = $xmlobj->xpath('/items/item');
?>
然后你可以遍历$ items对象来做你需要的任何元素。
也就是说,如果您坚持使用Hash::extract()
,查看转储数组,则item
条目不在数字键下,因此{n}
无法访问它们。您可能需要items.item
,或者他们可以使用除了&#39;项目&#39;,{s}.item
之外的其他键。