1

我有一个这样的数组。

  $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) 看起来完全一样。

这里有什么问题吗?

4

2 回答 2

4

该代码正在寻找整个 $flds 数组作为 $ret 中的一个值;

您可能想要使用array_intersect()然后检查结果的长度。

于 2012-06-07T20:04:48.287 回答
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
于 2012-06-07T20:23:09.363 回答