0

以下内容应在 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

哪一个会有最安全的结果?还是有更好的东西?我怎样才能安全地完成所有这些工作,确保它成功完成而不会超载?

4

1 回答 1

1

$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,请查看文档以了解这些方法的具体名称。如果它是一个本土类,如果它们不存在,您可能需要添加这些方法。

于 2013-08-30T00:40:49.237 回答