Php,in_array没有完全匹配

时间:2014-06-05 09:22:46

标签: php arrays

我想做以下事情:

$a = array();
$a[] = array(1,2);
$a[] = array(2,5);
$a[] = array(3,4);
var_dump (in_array(array(2,5), $a));

这会像预期的那样返回OK,但是如果源数组没有完全匹配:

$a = array();
$a[] = array(1,2, 'f' => array());
$a[] = array(2,5, 'f' => array());
$a[] = array(3,4, 'f' => array());
var_dump (in_array(array(2,5), $a));

它返回false。有没有办法用内置的方式来做,或者我必须编写它?

2 个答案:

答案 0 :(得分:2)

in_array()不是你应该用于这个问题的东西。因为它会将值与类型转换进行比较,如果需要的话。相反,您可以使用普通循环或类似的东西:

function in_array_array(array $what, array $where)
{
   return count(array_filter($where, function($x) use ($what)
   {
      return $x===$what;
   }))>0;
}

那么

var_dump(in_array_array(array(2, 5), $a)); //true

答案 1 :(得分:1)

$needle = array(2, 5);
$found = array_reduce($a, function ($found, array $array) use ($needle) {
    return $found || !array_diff($needle, $array);
});

这是对针是否是数组子集的实际测试。

function subset_in_array(array $needle, array $haystack) {
    return array_reduce($haystack, function ($found, array $array) use ($needle) {
        return $found || !array_diff($needle, $array);
    });
}

if (subset_in_array(array(2, 5), $a)) ...