0

我在 PHP 中使用数组时遇到了奇怪的事情。

$items = array();
$tools = json_decode($_GET['tools'],true);
foreach($tools as $key => $value)
{
   $items[$somevar][$anothervar] = $value;
}

然后我可以迭代$items

foreach($items as $key => $value)
{
  //Do Something
}

但奇怪的是,当我再次尝试迭代$toolswith 时foreach,它返回NULL.

//Never Happens    
foreach($tools as $key => $value)
{
  //Do Something
}

这可能是由垃圾收集器引起的吗?

我的应用程序使用 PHP 5.2.3、Linux CentOS、Apache 2.2 运行。

4

3 回答 3

1

不,我怀疑这与垃圾收集有关。

如果是零,垃圾收集器只会删除一个zval(PHP 变量容器) 。refcount这意味着,只有当没有变量引用指向数据时,它才会被删除。

只要您不执行unset( $tools );,该变量就应该可用。

有关详细信息,请参阅http://php.net/features.gc.refcounting-basics.php

于 2012-07-25T14:59:44.300 回答
0

$tools不是一个数组,它是一个对象。

将其更改为:

$tools = json_decode($_GET['tools'], true);

true参数将 json 解码为数组而不是对象。

更多信息:PHP 文档

于 2012-07-25T14:53:30.667 回答
0

是的,它不是一个数组,所以它是这样工作的:

$tools->key // Return the value of your occurence
于 2012-07-25T15:00:52.423 回答