我有这个foreach
循环。
$i2
看起来像这样(每次):
$i2 = array(
'id' => "category['id']"
);
这是一个foreach
循环。
foreach ($i2 as $o3 => $i3)
{
if (is_array($i3) !== true)
{
$new .= "<{$o3}>{$node->$i3}</{$o3}>";
} else {
$new .= "<{$o3}>";
$new .= "</{$o3}>";
}
}
}
$node
是new SimpleXMLElement($xml_reader->readOuterXML());
。但这是正常的。
问题在于:如果我使用$node->$i3
来获取该字段的XML值 - 它不起作用。但是,如果我用$node->category['id']
代替$i3
它。这似乎很奇怪category['id']
包含// i move the cursor to the first product tag
while ($xml_reader->read() and $xml_reader->name !== 'product');
// i iterate over it as long as I am inside of it
while ($xml_reader->name === 'product')
{
// i use SimpleXML inside XMLReader to work with nodes easily but without the need of loading the whole file to memory
$node = new SimpleXMLElement($xml_reader->readOuterXML());
foreach ($this->columns as $out => $in) // for each XML tag inside the product tag
{
// ... do stuff
,我可以使用调试工具检查它。
我在以前的项目中使用它,变量的变量工作正常。现在它没有。为什么呢?
@edit
这是在代码之前发生的事情:
$columns
基本上这是在有问题的代码之前发生的事情。 <product>
<associations>
<categories>
<category>
<id></id>
</category>
<category>
</associations>
</products>
是一个数组,可以配置输入XML文件(键是Prestashops XML标签,值是用户XML文件中的标签名称)。
例如:
<category id="1"></category>
在输入一:
$columns
所以在$columns = ('associations' => array(
'categories' => array(
'category' => 'category['id'] // this is what $i3 later is
)
));
:
category['id']
我可以轻松地达到XML文件的给定点。我得到$i3
值,这就是curl
。
答案 0 :(得分:2)
PHP预处理器尝试在$ node上查找$ i3属性。但是对象$ node没有这样的属性,然后就失败了。
在尝试访问之前项目中的类别['id']属性时,您确定使用相同的语法吗?
您可以尝试以下语法:
foreach ($i2 as $o3 => $i3)
{
if (is_array($i3) !== true)
{
$new .= "<{$o3}>" . eval("return \$node->$i3;") ."</{$o3}>";
} else {
$new .= "<{$o3}>";
$new .= "</{$o3}>";
}
}