Php 验证数组中的所有密钥
目前,我要做的就是检查一个数组$A的所有键是否在另一个数组$B的子集内Php 验证数组中的所有密钥,php,Php,目前,我要做的就是检查一个数组$A的所有键是否在另一个数组$B的子集内 $B = array('a', 'b', 'c', 'd'); if(array_keys($A) == array_intersect(array_keys($A), $B)) { action if true } 我想知道是否有一种更直接的方法可以做到这一点,比如in_array()函数 用法示例: 检查$\u POST数组以确保所有键与动态表单匹配,并在表单被黑客攻击时过滤掉额外的键 if (array_diff
$B = array('a', 'b', 'c', 'd');
if(array_keys($A) == array_intersect(array_keys($A), $B))
{
action if true
}
我想知道是否有一种更直接的方法可以做到这一点,比如in_array()
函数
用法示例:
检查$\u POST数组以确保所有键与动态表单匹配,并在表单被黑客攻击时过滤掉额外的键
if (array_diff_key($A, array_flip($B))) {
// there are keys in $A that are *not* in $B!
}
或者可能:
if (array_diff_key(array_flip($B), $A)) {
// not all of the keys in $B are in $A!
}
或者可能:
if (array_diff_key(array_flip($B), $A)) {
// not all of the keys in $B are in $A!
}
不,你的方式可能和我的方式一样。如果需要与列表进行比较,数组是最佳解决方案。虽然我可能会用
array\u intersect\u keys\u
来代替。不,你的方式可能与我使用的方式相同。如果需要与列表进行比较,数组是最佳解决方案。虽然我可能会使用array\u intersect\u keys\u
来代替。阅读起来可能不那么直截了当,但在的PHP手册中提供了一种检查数组是否是另一个数组的子集的简洁方法
if (array_unique(array_keys($a) + $b) == $b)
{
echo 'valid array keys';
}
也许不太容易阅读,但在PHP手册中提供了一种紧凑的方法来检查一个数组是否是另一个数组的子集
if (array_unique(array_keys($a) + $b) == $b)
{
echo 'valid array keys';
}
(reference)@Gordon,意味着我必须为数组B创建键(reference)意味着如果问题不是你想要的,你可能必须澄清这个问题;)这样的引用有点违反SO规则。或者,至少是习惯。(reference)@Gordon,意味着我必须为数组B创建键(reference)意味着如果不是你想要的,你可能必须澄清这个问题;)这样的引用有点违反SO规则。或者,至少是习惯。我用一个子集突出显示,以防你看不到。这实际上有点混淆了你想要什么。是否要确认所有
$B
键都在数组$A
中?可能是这些键的任何变体:@deceze:我要确认数组$A中的所有键都在数组$B中。您的差分方法不会测试这种情况。@Ben它做得很好array_diff_key
“返回[第一个参数]中不在[第二个参数]中的所有键。”。如果返回值为空/false
,则表示第一个参数的所有键都在第二个参数中。我用一个子集高亮显示,以防您看不到。这实际上有点混淆了您想要的内容。是否要确认所有$B
键都在数组$A
中?可能是这些键的任何变体:@deceze:我要确认数组$A中的所有键都在数组$B中。您的差分方法不会测试这种情况。@Ben它做得很好array_diff_key
“返回[第一个参数]中不在[第二个参数]中的所有键。”。如果返回值为空/false
,这意味着第一个参数的所有键都在第二个参数中。似乎有多种方法可以做到这一点。似乎有多种方法可以做到这一点。但考虑到执行的操作数量,我想我将采用deceze方法。谢谢你的回答;D@Ben:是的,作为奖励,您可以在deceze的方法中直接获得额外的数组键和值:如果($extra_values=array_diff_key(…))
。但是考虑到执行的操作数量,我想我会选择deceze方法。谢谢你的回答;D@Ben:是的,作为奖励,您可以在deceze的方法中直接获得额外的数组键和值:if($extra\u values=array\u diff\u key(…)
。