Php 为什么in_array()在$POST上不起作用?
我正在尝试检查用户提交的数据(来自Php 为什么in_array()在$POST上不起作用?,php,arrays,post,isset,Php,Arrays,Post,Isset,我正在尝试检查用户提交的数据(来自$\u POST)是否至少具有与我传递的数组相同的元素。我这样做是因为我稍后将通过调用$\u POST['element']来使用这些元素,我不喜欢关于该元素的错误不存在(未设置)。:) 我不想使用像isset($\u POST['x'],$\u POST['y'],$\u POST['z'])这样的东西,因为每次我都需要重写$\u POST,而且它看起来也不可读 我试图在数组中使用(数组('x','y','z'),$\u POST),但它不起作用(当它应该返回
$\u POST
)是否至少具有与我传递的数组相同的元素。我这样做是因为我稍后将通过调用$\u POST['element']
来使用这些元素,我不喜欢关于该元素的错误不存在(未设置)。:)
我不想使用像isset($\u POST['x'],$\u POST['y'],$\u POST['z'])这样的东西,因为每次我都需要重写$\u POST
,而且它看起来也不可读
我试图在数组中使用(数组('x','y','z'),$\u POST)
,但它不起作用(当它应该返回true时,它返回false
)。有什么办法可以让它工作吗?:)我确信我有空字符串,如$\u POST['x']
,$\u POST['y']
和$\u POST['z']
。我甚至尝试将hose三个$\u POST
元素的值更改为空字符串以外的值-仍然。。。没有按预期工作(
谢谢你的建议!:)
编辑:
刚刚发现in_array()
检查的是值,而不是键。然后,我试着这样做
在数组中(数组('title','slug','content'),数组键($\u POST))
但是,它仍然返回false
。怎么会这样/
编辑#2:
好的,下面是调试的结果
传入的$\u POST
:
array(3) {
["title"]=>
string(0) ""
["slug"]=>
string(0) ""
["content"]=>
string(0) ""
}
array(3) {
[0]=>
string(5) "title"
[1]=>
string(4) "slug"
[2]=>
string(7) "content"
}
bool(false)
数组键($\u POST)的结果
:
在数组(数组($标题、'段塞'、'内容')、数组键($发布))中的结果
:
问题是。。。为什么它是假的?据我所知,我都做对了
编辑#3:
最后,我创建了自己的方法,名为。in_array()
检查数组中是否存在值,而不是键。如果您想检查一个密钥是否存在,那么您需要类似于
in_array('x', array_keys($_POST));
或者更简单的
array_key_exists('x', $_POST);
如果要同时检查多个键,请执行以下操作:
$required_keys = array('x'=>1, 'y'=>1, 'z'=>1);
$missing_keys = array_diff_key($required_keys, $_POST);
$missing_keys_count = count($missing_keys);
在数组中(数组('x','y','z'),$\u POST),但它不起作用(当它应该返回true时,它返回false)
不,不应该。请阅读本手册
检查数组中是否存在值
相反,您希望检查数组键。使用获取所有密钥,然后在_数组中使用
使用in_数组,您一次只能测试一个值,但不能像您尝试的那样测试整个值数组
换句话说,如果您这样做:
in_array(array('title', 'slug', 'content'), array_keys($_POST))
它需要在keys数组中找到一个元素,该元素包含一个包含title、slug和comment的数组,这不是您想要的。首先:
我不想使用像isset($\u POST['x'],$\u POST['y'],$\u POST['z'])这样的东西,因为每次我都需要重写$\u POST,它看起来也不可读
您不应该更改其中一个超级全局变量;)
但是,在数组()中搜索值,而不是键
in_array(array('x', 'y', 'z'), array_key($_POST))
因为会检查指针是否准确地位于阵列中。请参见手册页面的示例#3。无法使用键作为第一个参数,因为数组的值对于作为键的数组无效
您需要类似于数组中的所有数组(数组$niners,数组$haystack)代码>或数组\u所有\u键\u存在(数组$keys,数组$search)返回是否所有元素都在数组中的代码>。您可能可以自己实现类似的功能,或者在此处寻求更多帮助。如果您希望确保存在多个键,则可能适用于:
function getPost( $index, $default = '' )
{
if ( isset( $_POST[ $index ] ) )
{
return $_POST[ $index ];
}
return $default;
}
!array_diff(array('title', 'slug', 'content'), array_keys($_POST))
你可能也对它感兴趣。你不明白
@埃里克是对的,试试这个-
in_array(array('title', 'slug', 'content'), array(array_keys($_POST)))
您是否尝试打印_r($_POST)?有关调试结果,请参阅“编辑#2”。in#u数组一次只能测试一个值,in#u数组($title',array_key)将起作用。看看我的最新答案。所以。。。我需要创建一个自定义函数来逐个检查键是否在“master”数组中,对吗?是的,如果您认为它比使用isset($\u POST['key1'],$\u POST['key2']等)更容易理解/更简洁的话;请看“编辑#3”。我为此创建了自己的方法。:)看起来不错。您不必使用严格的==
检查,因为array\u key\u exists只返回true或false。但它并没有错,我使用严格的类型检查只是因为该函数只返回布尔值。我觉得更清楚了!:)当我注意到我的代码没有按预期工作时,这是我想到的第一件事。这意味着我需要为它创建自定义方法。这根本不是我的意思!
in_array(array('title', 'slug', 'content'), array(array_keys($_POST)))