2013-06-18 41 views
1

運行此腳本時,我發現了以下警告:的foreach()錯誤

Warning: Invalid argument supplied for foreach() 

這是腳本:

$values = array(); 
foreach ($_POST['rights'] as $right_id) 
{ 
    $values[] = '(' . $id . ', ' . $right_id . ')'; 
} 

$_POST['rights']/$id是整數。在這種情況下,它是$_POST['rights'] = 1,2,3,4,5;$id = 2

奇怪的部分是,在不同的頁面上使用相同的輸入類型,它不會給出任何錯誤。

問題:它有什麼問題?

+0

你的意思是'$ _POST ['rights']'是一個整數數組嗎? Foreach必須帶一個整數才能迭代。 –

+0

您是否確認$ _POST ['rights']是數組(是數組(1,2,3,4,5)還是「1,2,3,4,5」?) – SheetJS

+0

檢查'$ _POST ['rights']'首先是一個數組,或者像'(array)$ _POST ['rights']'一樣在'foreach'中進行類型轉換。 – naththedeveloper

回答

5

檢查$_POST['rights']

var_dump($_POST['rights']); 

我覺得$_POST['rights']不是一個數組。

+0

當我擡起頭看第二頁時,我看到我確實忘了把它做成一個數組...... –

0

傳遞的數組$_POST['rights']可能是空的。

編輯:

像馬克貝克說,一個空的陣列是好的。你應該與其他答案一起去。

+0

我回復了它,至少最後一個數字是6. –

+1

在foreach中使用空數組時,不會給出無效的參數警告......只要使用空數組,它就完全有效這是一個可迭代的數據類型 –

+0

你是對的。如果它爲空,則會收到此錯誤。 –

0

foreach必須採取一個數組,你傳遞一個integer。你不能遍歷一個整數。

明智之舉可能會檢查任何你要遍歷確實是一個數組:

if(is_array($_POST['rights'])){ 
    foreach($_POST['rights'] as $value){ 
     //Whatever you want to do with each $value 
    } 
} 
else { 
    //Let the user know it's hit the fan… 
    throw new Exception('Help, I\'m not an array :(') 
} 

PHP文檔爲array S:http://php.net/manual/en/language.types.array.php

PHP文檔的foreachhttp://php.net/manual/en/control-structures.foreach.php

+0

如果你已經在檢查'$ _POST ['rights']'是一個數組,爲什麼還要打擾類型轉換? – naththedeveloper

+0

@FDL謝謝你指出。我打算以不同的方式回答這個問題,然後我改變了主意。編輯。 –

0

根據您的陳述$ _POST ['rights']不是數組。

這可能是具有1,2,3,4

你需要將其轉換成一個陣列爆炸功能簡單的字符串。

e.g

$_POST['rights'] = explode(",", $_POST['rights']); 

那麼你的for循環會工作。