isset()或array_key_exists()不能与$ _POST一起使用

时间:2014-02-13 10:34:56

标签: php

我有一个非常简单的代码,我不知道我做错了什么。我用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()返回错误的值。这是什么解决方案?任何帮助都将受到高度赞赏..我现在已经厌倦了..

问候

3 个答案:

答案 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()