【问题标题】:Cannot iterate through object in Ubuntu PHP 5.2.10-2 Works on PHP 5.2.10?无法遍历 Ubuntu PHP 5.2.10-2 中的对象在 PHP 5.2.10 上工作?
【发布时间】:2009-12-07 13:36:44
【问题描述】:

使用这段代码,我正在遍历一个对象。

作品:

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

它不能在我的桌面上运行:

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

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

}

提供的参数无效 foreach()

【问题讨论】:

  • phpinfo() 的输出版本是什么; ?

标签: php ubuntu versioning wamp


【解决方案1】:

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

【讨论】:

【解决方案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");

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

【讨论】:

  • 感谢您的回复。我确定我得到了正确的版本。我将参数添加到 json_decode 并编辑了我的代码,但它产生了相同的错误。
【解决方案3】:

尝试做:

$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 字符串;它不会工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2018-05-01
    • 2013-04-23
    • 2017-06-08
    • 2012-01-29
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多