【发布时间】:2016-04-22 16:13:18
【问题描述】:
我需要更新循环内数组中的值。通常这可以正常工作,但是有关此循环的某些内容会导致内存最大化。
while ($watering_window['total_run_time'] > $water_window_total)
{
foreach ($master_schedule as &$_ms)
{
$current_soak_time = $_ms['between_starts'] - $_ms['total_run_time'];
if ($current_soak_time > 0)
{
$new_soak_time = ceil($current_soak_time * 0.9);
$_ms['between_starts'] = $_ms['total_run_time'] + $new_soak_time;
$watering_window['total_run_time'] -= $current_soak_time - $new_soak_time;
}
}
}
关于写入$_ms['between_starts'](现有密钥)的某些内容导致了内存问题。如果我将其更改为写入一个新键(如$_ms['between_starts_new'],没有内存问题。我还尝试向它写入一个常量值(而不是数学),但它仍然超时。
【问题讨论】:
-
if ($current_soak_time > 0) 的大括号似乎没有闭合
-
谢谢你,jcorry。那是一个转录错误。在我的实际代码中,如果当前浸泡时间不 > 0,则有一个条件会向用户显示一条消息。
-
是无限循环吗? $watering_window['total_run_time'] > $water_window_total 是否曾经评估为假?使用调试器可以更轻松地解决此类问题...
-
您是否尝试过删除对您的
&$_ms值的引用?这可能是导致$_ms['between_starts']膨胀的原因(连续递增),进而导致$current_soak_time也 膨胀,因此不允许$watering_window['total_run_time'] > $water_window_total返回false。还是因为其他原因需要引用$_ms? -
$watering_window['total_run_time']应该越来越小,但它不能因为$_ms['between_starts']越来越大。反过来,正因为如此,$current_soak_time也是如此。反正我是这么看的。在这种情况下,您必须重写逻辑并确定引用是否真的必要,因为它直接影响循环的结果。