已经有功能检查haystack的所有元素== $ needle
function in_array_all($needle, $haystack) {
return (count(array_unique($haystack))==1 && $haystack[0]==$needle);
}
EX:
in_array_all(2, array(1,2,2,4)) //false
in_array_all(2, array(2,2,2,2)) //true
需要类似的功能但是会接受多针。类似的东西:
in_array_all_m(array(1,2), array(1,2,2,4)) //false
in_array_all_m(array(1,2,3), array(1,2)) //false
in_array_all_m(array(1,2), array(1,2,2,1)) //true
我知道foreach总能奏效,但需要一个优雅的解决方案。
答案 0 :(得分:1)
试试这个:
function you_need_a_better_function_name($needles,$haystack) {
return !array_diff($haystack,$needles);
}
例如,给定array(1,2)
和array(1,2,2,4)
,array_diff
将返回array(4)
,这是真实的,因此该函数返回false。
同样,对于array(1,2)
和array(1,2,2,1)
,array_diff
会返回array()
,这是假的,因此该函数返回true。
编辑:完全更正:
function lets_try_that_again($needles,$haystack) {
$unique_haystack = array_unique($haystack);
$unique_needles = array_unique($needles);
sort($unique_haystack);
sort($unique_needles);
return $unique_haystack == $unique_needles;
}
这将确保所有针头至少使用一次。