我想做以下事情:
$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。有没有办法用内置的方式来做,或者我必须编写它?
答案 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)) ...