你能解释一下SimpleXmlElement的foreach迭代的这种行为吗?
这个foreach循环运行良好,并遍历特定TAG中的所有元素
$tagName = $jednaPodminka['tag_name'];
foreach ($xmlelement->{$tagName}->ROW as $oneRow)
{
// check all rows in specific tag
$fld = (object) $oneRow->{(string) $jednaPodminka['field_name']};
$hodnota = (string) $fld;
$vysledek = $this->condManager->otestuj($hodnota, $jednaPodminka['value'], $jednaPodminka['cond']);
if ($vysledek)
{....}
}
但是当我在foreach循环之前定义$ rowset然后我在循环中使用这个rowset时,循环在两次迭代后停止迭代$ rowset元素,所以它迭代前两个项目然后重置并保持第一个元素 - >有效地使这个循环无止境
$tagName = $jednaPodminka['tag_name'];
$rowSet = $xmlelement->{$tagName}->ROW;
$hmr2 = count($rowSet);
foreach ($rowSet as $oneRow)
{
$fld = (object) $oneRow->{(string) $jednaPodminka['field_name']};
$hodnota = (string) $fld;
$vysledek = $this->condManager->otestuj($hodnota, $jednaPodminka['value'], $jednaPodminka['cond']);
if ($vysledek)
{....}
}
XMLElement(加载的xml文件)如下所示:
<TAG>
<ROW>
<FIELD>value</FIELD>
<FIELD>value</FIELD>
<FIELD>value</FIELD>
</ROW>
<ROW>
<FIELD>value</FIELD>
<FIELD>value</FIELD>
<FIELD>value</FIELD>
</ROW>
当我使用count($ rowset)时,我收到39.所以有39个块需要检查。
是否与循环内的其他对象/命名空间调用函数(&#34; otestuj&#34;)有关?
在localhost,win,xampp,php 7.0上进行测试