Php &引用;取消设置();vs";=空";循环

Php &引用;取消设置();vs";=空";循环,php,memory-management,Php,Memory Management,我有一个类似的循环 $items = array(10, 12, 13, 23, 34, 32, 11, 98); $items_single = array(); foreach ($items as $item) { $item_data = "SELECT * FROM MY_TABLE WHERE ITEM_ID = $item"; // Don't worry, this is just a demo query,

我有一个类似的循环

    $items        = array(10, 12, 13, 23, 34, 32, 11, 98);
    $items_single = array();

    foreach ($items as $item) {
        $item_data = "SELECT * FROM MY_TABLE WHERE ITEM_ID = $item";
        // Don't worry, this is just a demo query, I don't query like this

        array_push($items_single, $item_data);

        unset($item_data);
//      $item_data = NULL;
    }
释放
$item\u数据
内存的更好方法是什么?虽然
unset()
似乎更符合逻辑,但我认为这种方式php不会立即取消设置,而是会将其放在garabage集合之类的东西上,在循环之后可能会调用它。。。?(首先,这将无法达到取消设置()的目的)。虽然
=NULL
似乎是在做理想的事情,但这将需要一些恒定的时间,这实际上可能会减慢循环


此外,如果我什么都不做,php每次都会创建一个新变量(这会消耗内存),然后尝试删除我的旧变量并替换为新变量(我想它是这样工作的)。

不要担心这种情况!PHPGC可能足够聪明,可以看出您不想重新创建变量。如果你真的需要,至少运行一个(正确的)基准测试!请参阅以获取基准。您的最后一段是错误的。尽管在这个“范围”中定义了,
$item\u数据
将在每次迭代后继续存在,因此完全没有不确定的可能性,并且$item\u数据每次都会被覆盖,因此将其设置为null是没有用的。这里唯一有用的是在循环后取消设置变量(或使其为null),否则它将在脚本的其余部分(如果是全局的)保持存在。但是,只有当它是一大块数据时,这才有用。在正常情况下,您不需要自己清理这样的变量。select查询可能有多大?否则,在循环中取消设置变量是毫无意义的,因为在下一次迭代中它将被覆盖。