PHP 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示例: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个正确的条目。但我想找出问题的症结所在,因为我需要找到一个解决方案,因为在我
<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();
}