PHP foreach在SimpleXML对象上经常迭代

时间:2013-06-11 12:03:21

标签: php xml yii foreach simplexml

我正在使用simpleXML来解析xml文件,并希望使用foreach循环遍历这些元素,并在Yii模型的帮助下将其存储到mysql数据库中。

我有一个示例xml文件,其中包含1083个条目,每个条目都有三个属性。在Windows上使用PHP版本5.3.1时,它在数据库表中创建1208个条目,而不是1083.我试图在我的代码中找到问题,但经过几个小时的测试后,我决定在Windows上切换到PHP版本5.4.7。在此版本中,它创建了1083个正确的条目。但是我想找出问题究竟是什么,因为我需要找到一个解决方案,因为在Linux服务器上我的生产环境中我有PHP版本5.4.15-1也会创建错误的条目数。

这是xml的一些例子:

<listentries>
  <listentry>
    <name>downs</name>
    <value>-1.5</value>
    <type>STATIC</type>
  </listentry>
  <listentry>
    <name>upcoming</name>
    <value>1.0</value>
    <type>STATIC</type>
  </listentry>
  ...
</listentries>

所以我的问题是foreach循环过于频繁地迭代。

$list = simplexml_load_file($filename);
foreach($list->listentries->listentry as $entry){
     $model = new Entry;
     $model->name = $entry->name;
     $model->value = $entry->value;
     $model->type = $entry->type;
     $model->save();
}

当回显列表元素的数量时,我得到1083.当使用计数器计算迭代时,我得到1208.所以有一些非常奇怪的事情正在发生。数据库中的1208个插入条目如下所示:每个条目至少插入一次,但有些条目插入两次。

有没有人知道这次行为准确来自哪里?

我发现当xml文件包含少于970个条目时,会完成正确的迭代次数。

导入包含1083个条目的xml后,我的配置和插入条目数:

  • Windows,PHP 5.3.1,libxml 2.7.6:1208条目
  • Windows,PHP 5.4.7,libxml 2.7.8:1083条目
  • Linux,PHP 5.4.15-1,libxml 2.7.6:1208条目

所以看起来更新libxml会有所帮助!?

0 个答案:

没有答案