2

我正在使用 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 会有所帮助!?

4

0 回答 0