PHP-Foreach循环和资源

PHP-Foreach循环和资源,php,for-loop,resources,foreach,Php,For Loop,Resources,Foreach,我使用foreach循环来处理一大组项,不幸的是它使用了大量内存。(可能是因为它正在复制数组)。 显然,有一种方法可以通过以下代码节省一些内存:$items=&$array 对循环使用不是更好吗 有没有一种方法可以在foreach循环中处理完每个项目后立即销毁它们 例如 我只是在寻找在不耗尽资源的情况下处理大量项目的最佳方法。尝试for循环: $keys = array_keys($array); for ($i=0, $n=count($keys); $i<$n; ++$i) {

我使用foreach循环来处理一大组项,不幸的是它使用了大量内存。(可能是因为它正在复制数组)。 显然,有一种方法可以通过以下代码节省一些内存:
$items=&$array

对循环使用
不是更好吗

有没有一种方法可以在foreach循环中处理完每个项目后立即销毁它们

例如


我只是在寻找在不耗尽资源的情况下处理大量项目的最佳方法。

尝试
for
循环:

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

对于($i=0,$n=count($keys);$i从资源角度看,如果使用for循环而不是foreach循环,代码将更高效。foreach循环的每次迭代都会复制内存中的当前元素,这将需要时间和内存。使用for和使用索引访问当前项会更好更快。

使用以下方法:

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

}

因为foreach会创建一个副本

如果你从数据库中获取那么大的数据集,那么一旦数据集来自数据库,它通常会帮助你尝试并使用它。例如,从php文档中

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

此循环不会创建整个数据集的内存副本(至少不会冗余)。我的一位朋友使用此技术将她的一些查询处理速度提高了10倍(她的数据集是生物数据集,因此可能会变得相当大).

请将计数放在for之外。您将获得一些性能。我的脚本在这个循环中使用的内存减少了50%。@mnml:这是可以预测的,因为
foreach
使用数组的内部副本,从而使该数组的内存使用量增加了一倍。PHP中的内部副本并不一定意味着内存增加了一倍。它不是预先递增的吗f
$i
(++$i)。您将错过
$keys
$resource = mysql_query("query");
while ($row = mysql_fetch_array($resource, MYSQL_NUM)) {
    process($row);
}