2013-07-23 153 views
1

我可以检查是否某个整数值(它来自用户的输入,并且因此应该被过滤)是在特定的范围内是这样的:检查PHP数组元素

<?php 
    $size=50; 
    var_dump(in_array($size,range(1,100))); 
?> 

如果这将回声真尺寸范围为1〜100。当然另一种方法是使用过滤器:

<?php 
    $size=50; 
    $int_options = array("options"=> 
         array("min_range"=>0, "max_range"=>256)); 
    var_dump(filter_var($size, FILTER_VALIDATE_INT, $int_options)); 
?> 

但是,如果我需要知道,如果一个数组中的元素都在此范围内(也可能删除那些不)什么考虑性能和内存使用情况是最佳实践。我更喜欢使用php函数而不是写我的。

+0

做你想做的是在不同范围内的每个数组元素比较? – 2013-07-23 10:32:14

+0

不!所有的元素都应该被检查在专用的范围内,例如1到100,而我更喜欢数据被过滤和过滤的方法,因为'$ size'来自用户输入。谢谢 – Trix

回答

2

稍微功能的方法(我不知道如果PHP支持lambda表达式):

function mapper($n) { return $n >= 1 && $n <= 100 ? 1 : 0; } 

... 

if (array_product(array_map('mapper', $array)) == 1) { } 

不怎么表现也不内存使用效率,虽然。我想建议使用array_filter

function my_filter($n) { return $n >= 1 && $n <= 100; } 

... 

$newarray = array_filter($array, 'my_filter'); 

(顺便说一句,到底是谁设计的语言.. array_maparray_filter有不同顺序的参数?)

+0

*旁注:*由于PHP源自不同的语言,因此它们的顺序不同。其他例子是'in_array()'和'strpos()'。在某些功能中甚至更疯狂的参数顺序可以颠倒过来,例如, 'implode()' – Raptor

+0

谢谢,但看起来太贵了。我喜欢更多压缩的方式。我在我的页面中有50个这样的数组, – Trix

+0

@Arash,第二个? (array_filter)。这应该是便宜的。 – nothrow

0

如果我是你,我会用一个更简单的办法:

$size=50; 
if($size <= 100 && $size >= 1) { 
    return true; 
} else { 
    return false; 
} 

无功能调用,简单的整数比较。很好的表现。

+0

OP已经知道这个... – 2013-07-23 10:31:23

+0

谢谢你,但这不是我的问题。这个问题与数组元素有关,那只是开始。由于$ size来自用户输入,因此应该进行消毒处理,所以我最好使用这些方法 – Trix

+0

,您可以将比较代码封装到一个小函数中,并为每个数组元素调用函数。 – Raptor