0

使用此代码,我正在迭代一个对象。

作品:

  • 带有 WAMP 和 PHP 5.2.9 的 Windows
  • 带有 PHP 5.2.10 的 Linux 网络服务器

它不适用于我的桌面:

  • 来自 repo 的 Ubuntu 9.10 和 PHP 5.2.10-2
$incomingData = json_decode($_POST['data']);

foreach($incomingData as $key => $action)
{

}

为 foreach() 提供的参数无效

4

3 回答 3

3

也许您的一台服务器启用了magic_quotes_gpc,因此您可以在解码之前尝试在$_POST['data'] 上使用stripslashes。两个 PHP 版本都应该能够遍历对象。

于 2009-12-07T13:59:10.057 回答
2

您确定您的 PHP 版本正确吗?

从文档中foreach

从 PHP 5 开始,也可以迭代对象。

尝试json_decode将第二个参数设置为true, 以json_decode返回关联数组而不是对象。

$incomingData = json_decode($_POST['data'], true);

其中第二个参数$assoc(默认为false)表示:

TRUE,返回的对象将被转换为关联数组。

我的猜测是一个盒子的 PHP 5 不到。

要确认这是问题所在,请尝试更改$incomingData为某种无害的关联数组:

$incomingData = array("foo" => "bar", "baz" => "monkey");

看看这是否会使错误消失。

于 2009-12-07T13:41:38.283 回答
0

尝试做:

$data_array = get_object_vars(json_decode($json_data));

print_r($data_array);

仅当您从某些网页获取信息时,例如

$data = file_get_contents('http://www.someurl.com/somerestful_url/');
$data_array = get_object_vars(json_decode($data));
print_r($data_array);

另外,您可能正在尝试执行 json_encode,而是使用 json_decode($_POST['data']);

除非您在 $_POST['data']; 中有 json 字符串;不起作用。

于 2009-12-07T14:05:19.923 回答