我有这样的数组。
$flds = array("fn", "ln", "em");
我有另一个像这样的关联数组。这是从JSON POST动态返回的。
$ret = array("fn" => "xyz", "ln" => "abc", "em" => "s.2", "another" => "123")
我想搜索第一个数组是否存在于第二个数组中。 我这样做了:
if ( in_array( $flds, array_keys($ret)))
echo "exists";
else
echo "does not";
它总是返回“不”。当我打印时,$ flds和array_keys($ ret),两者看起来完全相同。
这里有什么不对吗?
答案 0 :(得分:4)
该代码正在寻找整个$ flds数组作为$ ret的值;
您可能希望使用array_intersect(),然后检查结果的长度。
答案 1 :(得分:1)
in_array()
函数搜索元素是否是数组的元素。在您的情况下,您要确定第一个数组是否是第二个数组中的键的子集。让我告诉你哪些有效,什么无效:
/* check if 'fn' is an array key key of $ret */
in_array('fn', array_keys($ret)) // true
/* check if array('fn') is an element of array(array('fn'), 'en') */
in_array(array('fn'), array(array('fn'), 'en')) // true
/* check if $flds is a key of $ret */
in_array( $flds, array_keys($ret)) // false
/* check if all elements of $flds are also keys of $ret */
array() === array_diff($flds, array_keys($ret)) // true