2013-12-17 119 views
0

我一直运行到错误Warning: Invalid argument supplied for foreach()和我的生活我不明白为什么。这里是我的相关代码:循环json_decode与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

你可以发布你的价值的一个例子'$ _ POST [ “param-0”]' – koosa

+0

这是另一个使用'stripslashes()'来破坏数据的例子。 –

+0

我的想法已经用完了,所以我尝试了它,希望它可以工作,但我真的没想到它会。 – joebro

回答

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 ... 
} 

}

+0

现在,我有一个小测试用例,它只是一个数组,如:[“15”,“18”]我将foreach循环的头部改为'foreach($ decodeJson as $ key => $ ID)'但这是一个不行(同样的错误)。 – joebro

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或字符串(空或不是)是可迭代的。这里没有什么可做的。我们的数据已经一去不复返了。!_(