2016-03-03 123 views
1

如何检查所有数组值是否在范围内是最好的方法?检查所有数组值是否在一个范围内的最佳方法

例如:

$range = range(10, 40); 

$array1 = array(10, 20, 40); // OK 
$array2 = array(11, 22, 42, 30); // FALSE 
$array3 = array(50); // OK 
$array4 = array(10, 20, 30, 'a'); // FALSE 
$array5 = array("%", 20); // FALSE 
$array6 = array(10, 20, 40, 39, 40); // OK 

因此,如何能予检查是否数组的值是数字(整数),并且在范围内?

我想:

$tmp = 0; 
foreach ($array1 as $a1) { 
    if (!in_array($a1, $range) && is_int($a1)) { 
     $tmp++; 
    } 
} 

if ($tmp > 0) { 
    echo "false"; 
} else { 
echo "ok"; 
} 

也许是更好的办法?也许与array_map()

+0

所以,你已经尝试了什么? –

+0

'min'函数将为您提供所有阵列的最小值。 max函数会给你所有数组的最大值。你可以看到'min($ a1,$ a2,$ a3)<10'来检查下界并为上界做类似的事情。 – kainaw

+0

1和2不是10到40之间,也不是5等等,所以你的例子与描述不符。 – AbraCadaver

回答

0

会这样的工作吗?

它将数组中的每个值与范围($ min和$ max)进行比较,如果数组中的某个值不在指定范围内,则返回“不在范围内”。

$min = 10; 
$max = 40; 


$array1 = array(10, 20, 40); // OK 


foreach ($array1 as $tmpArr){ 
    if (!($min<=$tmpArr && $tmpArr<=$max)){ 
     echo "Not in range"; 
     break; 
    } 
} 
3
<?php 
    $range  = range(10, 40); 
    $array1  = array(10, 20, 40); 
    $isInRange = (min($array1)>=min($range) and max($array1)<=max($range)) ? "Yes" : "No"; 
    echo $isInRange; 
    //prints 'Yes' when compared with array(10, 20, 40); 
    //prints 'No' when compared with array(11, 22, 42, 30); as you have out range value 42 here 
    ?> 

检查这个最简单的方法是使用maxmin在这里,因为你避免在这里验证了整数。 max选择数组中的最大值,并且min至少一个。

0
function array_values_all_numbers($a, $min = PHP_INT_MIN, $max = PHP_INT_MAX){ 
    foreach($a as $v){ 
    if(is_int($v) && $v >= $min && $v <= $max){ 
     return false; 
    } 
    } 

    return true; 
} 

var_dump(array_values_all_numbers(range(0, 100, 3))); // true 
var_dump(array_values_all_numbers([1, 2, 3, 4, 'a'])); // false 
var_dump(array_values_all_numbers([1, 2, 3, 4], 3, 4)); // false 
var_dump(array_values_all_numbers([1, 2, 3, 4], 2, 4)); // true 

或许替代:

$myarray = array_filter(array_values($input), 'is_int'); 
foreach($myarray as $value){ 
    // loop over all array values that are numbers and skip the rest. 
} 

在一个侧面说明;在编程方面有范围可能意味着两件事情:

  • 检查,看是否有数量为两个数字之间。
  • 范围,循环开始具有可选步骤
  • PHP函数range(),从开始具有可选步骤

它使一个非常混乱的问题返回一个数组。

0

这里的一个有趣的方式:

var_dump(
    array_values($array1) == array_filter(array_values(array_intersect($range, $array1)), 'is_int') 
); 
  • 计算的范围内,阵列
  • 非整数之间卸下相交
  • 与阵列比较
  • 结果是truefalse
0

只是运行它并在这里学习。

<?php 
    $array1 = array(11, 20, 30); 
    $array2 = array(11, 22, 22, 30); 
    $array3 = array(20); 
    $array4 = array("a", 20, 30, 13); 
    $array5 = array(46, 20); 
    $array6 = array(52, 20, 31, 39, 30); 

    $arr = array($array1, $array2, $array3, $array4, $array5, $array6); 

    array_walk($arr, function($val){ 
     if( min($val) > 10 && max($val) < 40){ 
      echo "<br/>matched for<br/>"; 
      print_r($val); 
     } else { 
      echo "<br/>not matched for<br />"; 
      print_r($val); 
     } 
    }); 
?> 

有很多更好的方法,你可以试试。

输出

matched for 
Array ([0] => 11 [1] => 20 [2] => 30) 
matched for 
Array ([0] => 11 [1] => 22 [2] => 22 [3] => 30) 
matched for 
Array ([0] => 20) 
not matched for 
Array ([0] => a [1] => 20 [2] => 30 [3] => 13) 
not matched for 
Array ([0] => 46 [1] => 20) 
not matched for 
Array ([0] => 52 [1] => 20 [2] => 31 [3] => 39 [4] => 30) 
0

我以为你只是一个普通的数组不是关联数组。

<?php 

$a = array(1,2,3); 
$b = array(2,3); 
$c = array(2,3,4); 

function all_in_range(array $needle, array $haystack) { 
    return array_reduce(
     $needle, 
     function($carry, $item) use ($haystack){ 
      return $carry?in_array($item,$haystack):false; 
     }, 
     true 
    ); 
} 

var_dump(all_in_range($b, $a)); // check $b inside $a - true 
var_dump(all_in_range($c, $a)); // check $c inside $a - false 

结果:

bool(true) 
bool(false) 

===或像这样===

function all_in_range(array $needle, $min, $max) { 
    return (is_int($min) && is_int($max)) ? 
     array_reduce(
      $needle, 
      function($carry, $item) use ($min, $max){ 
       // limits values are included 
       return $carry?is_int($item)?($item>=$min && $item<=$max):false:false; 
      }, 
      true 
     ) : 'wrong limits'; 
} 

var_dump(all_in_range($b, 1, 3)); // check $b inside range 1..3 
var_dump(all_in_range($c, 1, 3)); // check $c inside range 1..3 
相关问题