php中用于处理大型数组的空闲内存


Free memory in php for processing large arrays

以下内容应该在MySQL表的大型数组上运行:

$v1_views = $database->get_all("SELECT image_id FROM image_views");
$v2_array = array();
foreach ($v1_views as $view)
   $v2_array[$view["image_id"]]++;

($view也是一个包含表中2个变量的数组)

我尝试过类似的方法,但它给了我一个错误,即内存已满。所以我在想,把这个添加到foreach()的末尾是个好主意吗?:

unset($view["image_id"]);

所以它不会创建另一个大数组。。。或者可能只是foreach()之后的这个:

unset($view);

在这之后,我还必须在MySQL中插入所有这些变量,并在10000多行上使用UPDATE

哪一个结果最安全?还是有更好的东西?我如何才能安全地完成这一切,确保它在没有过载的情况下成功完成?

$v1_views$v2_array正在使用大量空间。但$view是一个只有一个元素的微小阵列,它不占用太多空间。每次通过循环时,变量都会被结果的下一行中的值替换,上一行的值会自动回收。

保存内存的方法是而不是生成所有查询结果的数组。大多数数据库API都有一种一次获取一行的方法,因此代码的结构应该类似于:

$result = $database->query("SELECT image_id FROM image_views");
$v2_array = array();
while ($view = $result->fetch()) {
    $v2_array[$view["image_id"]]++;
}

我刚刚创建了方法名称queryfetch——如果您使用的是第三方API,请查看文档以了解这些方法的具体名称。如果它是一个自行开发的类,那么如果这些方法还不存在,您可能需要添加它们。