in_array严格模式下的多个针

时间:2014-01-28 20:48:28

标签: php

已经有功能检查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总能奏效,但需要一个优雅的解决方案。

1 个答案:

答案 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;
}

这将确保所有针头至少使用一次。