我有一个非常简单的代码,我不知道我做错了什么。我用Ajax发送post变量,有3个复选框(数组)name =“options []”..我收到正确的数组,如果我检查Option1,Option2或Option3,我得到正确的数组..但是当我尝试使用isset()或使用array_key_exist()检查并确认它们,但它没有给我正确的答案。例如,如果我只检查选项1和3,我在POST中得到以下内容
[options] => Array
(
[0] => option_one
[1] => option_two
)
只有在数组中不存在某个键时才需要执行某些操作..我尝试过类似下面的操作..
if (array_key_exists("option_one", $_POST['options'])) {
echo "Option one exists";
} else {
echo "option one does not exist";
}
它返回flase结果,然后我尝试使用! (之前),返回相同的结果。然后我尝试使用isset($ _ POST ['options'] ['option_one'])没有任何运气..然后我尝试了以下函数再次检查数组..
function is_set( $varname, $parent=null ) {
if ( !is_array( $parent ) && !is_object($parent) ) {
$parent = $GLOBALS;
}
return array_key_exists( $varname, $parent );
}
并像这样使用它
if (is_set("option_one", $_POST['options'])) {
echo "Option one exists";
} else {
echo "option one does not exist";
}
没有效果,它只是返回false值。我尝试使用$ _REQUEST而不是$ _POST但没有运气,我已经阅读了许多线程,isset()或array_key_exists()返回错误的值。这是什么解决方案?任何帮助都将受到高度赞赏..我现在已经厌倦了..
问候
答案 0 :(得分:2)
option_one
不是数组中的键,它是值。关键是0
。如果有的话,请使用:
in_array('option_one', $_POST['options'])
答案 1 :(得分:0)
array_key_exists查找数组的键。你正在寻找价值。 :)
你想要的是
/**
* Check wheter parameter exists in $_POST['options'] and is not empty
*
* @param $needle
* @return boolean
*/
function in_options($needle)
{
if (empty($_POST['options']))
return false;
return in_array($needle, $_POST['options']);
}
答案 2 :(得分:0)
您确定在选项[]数组中获得了正确的信息吗?如果您单击选项1和选项3,那么数组是否应该看起来像这样?
[options] => Array
(
[0] => option_one
[1] => option_three
)
由于isset()
是语言构造而不是函数,因此您可以重新进行验证以提高效率。
function in_options($needle)
{
//Checking that it is set and not NULL is enough here.
if (! isset($_POST['options'][0]))
return false;
return in_array($needle, $_POST['options']);
}
函数empty()
正常工作,但我认为$_POST['options'][0]
此时只需要检查isset()
。