我正在尝试编写一个处理大量数据的实用程序,内存是一个因素。不幸的是,每次我运行这组循环时,它都会吃掉 apx。14MB 的内存,因为它被执行了数千次,即使使用了 unset() 调用(是的,我知道它们并没有完全清理内存,这就是我问这个问题的原因)。我想知道是否有更简单的方法可以做到这一点。当前工作代码:
$qr = array();
foreach($XML->row as $row)
{
$ra = array();
foreach($row as $key => $value)
{
$ra[$key] = $value[0];
unset($key,$value);
}
$qr[] = $ra;
unset($row,$ra);
}
unset($XML);
return $qr;
另一种尝试是这样做,但它落后了。有人知道我在做什么错吗?
$qr = array();
while(list(,$row) = each($XML->row))
{
$ra = array();
while(list($key,$value) = each($row))
{
$ra[$key] = $value[0];
unset($key,$value);
}
$qr[] = $ra;
unset($row,$ra);
}
unset($XML);
return $qr;
基本上在第一个循环中,我只是尝试进行基本的数组/对象迭代。在第二个循环中,我试图遍历每个数组值并获取第一个元素,同时保持对象/数组索引关联。看来我最初是这样写的,因为它是唯一有效的东西(因为它循环通过一个 SimpleXML 对象)。任何关于加速这件事或弄清楚如何让它不吃内存的提示将不胜感激。
我正在寻找垃圾收集或更高效的代码的解决方案。我不打算替换 SimpleXML,因为不需要它。 更清楚的是,我正在寻找:
- 一种无需调用内部循环即可迭代 SimpleXML 对象的方法(这只是因为我在执行 $value[0]。为什么有必要这样做?
- 一种更有效(速度或内存方面)迭代数据的方法