0

我有一个数组如下:

array(
    'items' => array(
        'item' => array(
            (int) 0 => array(
                '@item' => '3-394-001068-00000'),
            (int) 1 => array(
                '@item' => '3-394-001069-00000'),
            )
     )
)

我正在尝试将所有“项目”条目提取到一个新数组中。

到目前为止,这是我的代码:

$xmlarray = Xml::toArray(Xml::build(WWW_ROOT .'files/itemsAll/'.$file));

            debug($xmlarray);
            $results = Hash::extract($xmlarray, '{n}.item');

            debug ($results);

但这仅返回一个空数组。有人可以给我一个提示我哪里出错了吗?

提前致谢

4

2 回答 2

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, the{n}指的是“数字键”,而“items”显然不是。如果要提取“items”中的所有“item”,应该是

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')
于 2014-04-21T20:38:10.077 回答
0

首先,有更好的方法从 XML 文件中提取信息,而不是转换为数组然后使用Hash::extract(). Cake 的XML 库默认返回一个 SimpleXML 对象,因此请阅读有关如何直接从 XML 中提取信息的文档。具体来说,该xpath方法可能对您有用。您的使用可能看起来像这样:

<?php
$xmlobj = Xml::build(WWW_ROOT .'files/itemsAll/'.$file);
$items = $xmlobj->xpath('/items/item');
?>

然后你可以遍历 $items 对象来对元素做任何你需要做的事情。

也就是说,如果您坚持使用Hash::extract(),查看转储的数组,您的item条目不在数字键下,因此{n}无法访问它们。您可能想要items.item,或者如果它们可以在键下,而不仅仅是“项目”,{s}.item

于 2014-04-21T20:35:10.213 回答