有无
$my_arr_1 = array ("denied","denied","denied");
$my_arr_2 = array ("denied","denied","allowed");
需要一个func来检查数组中的所有元素是否等于:
in_array_all("denied",$my_arr_1); // => true
in_array_all("denied",$my_arr_2); // => false
是否有像in_array_all这样的php本机函数?
如果没有,那么编写这样一个函数最优雅的方法是什么?
答案 0 :(得分:3)
function in_array_all($needle,$haystack){
if(empty($needle) || empty($haystack)){
return false;
}
foreach($haystack as $k=>$v){
if($v != $needle){
return false;
}
}
return true;
}
如果你想变得非常疯狂:
function in_array_all($needle,$haystack){
if(empty($needle)){
throw new InvalidArgumentException("$needle must be a non-empty string. ".gettype($needle)." given.");
}
if(empty($haystack) || !is_array($haystack)){
throw new InvalidArgumentException("$haystack must be a non-empty array. ".gettype($haystack)." given.");
}
foreach($haystack as $k=>$v){
if($v != $needle){
return false;
}
}
return true;
}
答案 1 :(得分:2)
function in_array_all($value, $array)
{
return (reset($array) == $value && count(array_unique($array)) == 1);
}
答案 2 :(得分:0)
我不知道你的代码的上下文。但是如何扭转逻辑呢?然后,您就可以使用PHP的本机函数in_array
。
$my_arr_1 = array ("denied","denied","denied");
$my_arr_2 = array ("denied","denied","allowed");
!in_array("allowed", $my_arr_1); // => true
!in_array("allowed", $my_arr_2); // => false
这完全取决于您的数据集。但鉴于样本数据,这将起作用。 (另外,请注意每个方法调用前面的否定!
以产生所需的布尔结果。)
答案 3 :(得分:0)
使用array_count_values()
的另一种解决方案:
function in_array_all(array $haystack, $needle) {
$count_map = array_count_values($haystack);
// in your case: [ 'denied' => 2, 'allowed' => 1 ]
return isset($count_map[$needle]) && $count_map[$needle] == count($haystack);
}
答案 4 :(得分:0)
理查德的解决方案是最好的,但没有一个关闭的paren ;-) - 这里是固定和删节:
function in_array_all($needle,$haystack)
{
if( empty($needle) || empty($haystack) ) return false;
foreach($haystack as $v)
{
if($v != $needle) return false;
}
return true;
}