使用foreach循环错误循环遍历json_decode

时间:2013-12-17 16:22:52

标签: php json

我一直遇到错误Warning: Invalid argument supplied for foreach()并且在我的生命中我无法弄清楚为什么。这是我的相关代码:

$Ids = $_POST["param-0"];

$toReturn = array();

$decodedJson = json_decode($Ids,TRUE);

stripslashes($decodedJson);

foreach($decodedJson as $id)
{
    ... do stuff with $toReturn...
}

$Ids是来自先前使用json_encode编码的文件的字符串。我添加了stripslashes因为它是在Stack Overflow上的另一个问题中推荐的,但它没有帮助。如果我将foreach循环的开头更改为foreach($toReturn as $id),则错误消失。谢谢!

编辑:在上一个文件中,$ _POST [“param-0”]是一个整数数组,我用json_encode返回。根据我正在使用的测试数据,["15","18"]正在传递。

3 个答案:

答案 0 :(得分:0)

首先你需要解码json(你已经做过)

$decodedJson = json_decode($Ids, True);

然后从json中获取每个值,例如,回显它。这样做:

foreach ($decodedJson as $key => $jsons) { // This will search in the 2 jsons
 foreach($jsons as $key => $value) {
     echo $value; // This will show jsut the value f each key like "var1" will print 9
                   // And then goes print 16,16,8 ...
}

}

答案 1 :(得分:0)

从上到下:

$Ids = $_POST["param-0"];

如果输入数据没有您期望的确切格式,则会触发通知。您应该测试密钥是否存在,例如使用isset()

$toReturn = array();
$decodedJson = json_decode($Ids,TRUE);

如果输入数据无效JSON,则返回null。你应该用例如验证它is_null()

stripslashes($decodedJson);

如果输入数据有效,我们会先收到警告:

  

警告:stripslashes()要求参数1为字符串,给定数组为

然后,如果我们的PHP版本很旧,我们将把我们的数组强制转换为一个字符串Array,如果我们的PHP版本是最近的,我们将获得null。无论如何,我们的数据都消失了。

如果输入数据无效,我们将获得一个空字符串。

foreach($decodedJson as $id)
{
    ... do stuff with $toReturn...
}

null或字符串(空或不)都是可迭代的。这里没有什么可做的。我们的数据永远消失了:_(

答案 2 :(得分:0)

最终我错误地编码了我想解码的内容。一切都很好,谢谢大家的帮助!

相关问题