PHP - Foreach循环和资源

时间:2009-11-16 13:32:36

标签: php for-loop resources foreach

我正在使用foreach循环处理大量项目,不幸的是它正在使用大量内存。 (可能是因为它正在做一个数组的副本)。 显然,有一种方法可以使用以下代码保存一些内存:$items = &$array;

使用for循环不是更好吗?

有没有办法在foreach循环中处理完每个项目后立即销毁它们。

例如

    $items = &$array;
    foreach($items as $item)
    {
     dosomethingwithmy($item);
     destroy($item);
    }

我只是在寻找处理大量物品的最佳方法,而不会耗尽资源。

4 个答案:

答案 0 :(得分:6)

尝试for循环:

$keys = array_keys($array);
for ($i=0, $n=count($keys); $i<$n; ++$i) {
    $item = &$array[$keys[$i]];
    dosomethingwithmy($item);
    destroy($item);
}

答案 1 :(得分:4)

在资源方面,如果使用for循环而不是foreach循环,则代码将更有效。 foreach循环的每次迭代都会将当前元素复制到内存中,这需要时间和内存。使用索引和使用索引访问当前项目会更好更快。

答案 2 :(得分:1)

使用它:

reset($array);
while(list($key_d, $val_d) = each($array)){

}

因为foreach创建了一个副本

答案 3 :(得分:1)

如果从数据库中获取大型数据集,通常可以在数据库出现时立即尝试使用数据集。例如,来自php mysql_fetch_array文档。

$resource = mysql_query("query");
while ($row = mysql_fetch_array($resource, MYSQL_NUM)) {
    process($row);
}

此循环不会创建整个数据集的内存副本(至少不会冗余)。我的一个朋友使用这种技术加速了她的一些查询处理(她的数据集是生物学的,所以它们可以变得非常大)。