2013-12-17 147 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或字符串(空或不是)是可迭代的。這裏沒有什麼可做的。我們的數據已經一去不復返了。!_(