我一直遇到错误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"]
正在传递。
答案 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)
最终我错误地编码了我想解码的内容。一切都很好,谢谢大家的帮助!