PHP foreach在SimpleXML对象上过于频繁地迭代

PHP foreach在SimpleXML对象上过于频繁地迭代,php,xml,yii,foreach,simplexml,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个正确的条目。但我想找出问题的症结所在,因为我需要找到一个解决方案,因为在我

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

有人知道错误行为的确切来源吗

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

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

  • Windows、PHP5.3.1、libxml 2.7.6:1208个条目
  • Windows、PHP5.4.7、libxml 2.7.8:1083条
  • Linux、PHP5.4.15-1、libxml 2.7.6:1208条

看来更新libxml会有所帮助

您好@sandro1111,欢迎来到StackOverflow!你能给我们一个包含两条记录的xml文件的例子吗?试试
return$list
查看记录的确切数量。@SudhanshuSaxena用户从未声明这是一个函数,他在问题的底部也提到了记录的数量。您遇到的最有可能是PHP simplexml扩展中的一个缺陷。我写这篇文章是因为不同PHP版本的不同行为表明了这一点。但是,请小心:请提取一个自我包含的测试用例,它会复制您的问题(使用尽可能少的代码/数据)。如果你真的想进一步研究这个问题,如果你想创建一个可以有效修复的bug报告,这一点很重要。很抱歉无论如何,由于OP没有提供实际数据,这很可能不会被复制。至少我不会在意,除非OP提供了一个可以复制的缩短的测试用例。
$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();
}