這是今天在做作業的時候遇到的一個問題,不知道大家有沒有遇到同樣的問題,就是去除數組中不符合我們條件的數據並且保留其鍵名。
言歸正傳:
array array_filter ( array $input [, callback $callback ] )
array_filter() 依次將 input 數組中的每個值傳遞到 callback 函數。如果 callback 函數返回 TRUE,則 input 數組的當前值會被包含在返回的結果數組中。數組的鍵名保留不變。
具體的使用方法我也研究了一下。在一般情況下使用
function old($var)
{
return($var % 2 == 1);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
print_r(array_filter($array1, "old"));
這樣我們打印出來就是
Array( [a] => 1[c] => 3 [e] => 5);
這里需要說明的是,$var 代表傳入的值參數,然后根據函數的運算,返回為真的則進行保留,返回為假的進行去除。
手冊上也就這么多的說明,但是怎么在oop中使用呢?想了半天也實驗了半天,搞定了。
在oop中
function old($var)
{
return($var % 2 == 1);
}
$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
print_r(array_filter($array1, array($this,'old')));
說完用法,我們來回顧下 array_filter的含義,它是將數組的值依次傳入其中進行運算的,也就相當於foreach一遍,測試了下在1185條數據處理使用了 0.25s。
若果數據比較多的時候 時間還會更長。下面看下另外的一個方法
foreach($array as $key => $value){
if(true){
continue;
}
-------------------------
}
兩個函數處理的時間是一樣的,但是要注意的一點就是
arry_filte是一次運算,不可以參雜更多的運算邏輯。
而foreach則可以在運算的同時進行其它的操作運算。
綜上所述,在數據量較小或不需要太多的運算的時候完全可以使用array_filter,並且效率是很高的。
若數據量比較龐大,或運算比較復雜則使用下面一種比較快些。。