2013-07-23 45 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