我正在尝试遍历数组中的数千个项目,执行一些操作并将一些值保存到 mysql 表中。
但是,随着我循环,内存使用量不断增加,直到用完我在 php.ini 中指定的内存,这非常快。
我试过使用 unset,将变量设置为 null 并查看垃圾回收,但没有任何影响。
是否有更有效的方法可以遍历这些元素(即内存使用量不会持续增长)。
下面是我正在做的一个简化示例。
foreach ($subscribers as $subscriber)
{
$member = new Member($subscriber['id']);
if ($member['id'] > 0)
{
$bulletin = Bulletin::getCustomBulletin($member['id']);
Bulletin::compileBulletin($member['email'], time(), $bulletin['title'], $bulletin['content']);
echo $member['email'] . "\n";
echo memory_get_usage() . "\n";
}
}
这会产生以下结果:
an@email.com
11336688
an@email.com
12043640
an@email.com
12749952
最佳答案
$suscribers
是数据库查询的结果吗?
如果是这样,它可能是您问题的根源:即使您一次浏览一行,这些行也会缓冲在内存中。
您可以尝试使用 unbuffered queries或限制查询结果的数量并执行几个较小的查询。
关于php - PHP foreach 超出内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10300599/