2013-06-18 58 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循环会工作。