2012-06-13 17 views
0

我有電話號碼的數組,我需要一個快速的方法這個陣列分成有效無效電話號碼(根據我的有效的定義和無效的),這樣的:濾波器陣列,並得到無效的項目在PHP

$phone_numbers = array(
    '04165555555', 
    '02125555555' 
); 

$valid_phone_number_regex = '/^0?(416|426|412|424|414)(\d{7})$/i'; 

我可以在一個快速的方式使用array_filter得到所有有效的數字,但我也需要無效問卷(供報告問題) ,該陣列可以容納數千數字!

+0

...添加'和array_diff()'和你有無效的。 – powtac

+0

如果您在數千行上執行操作,您可能需要考慮在數據庫中執行操作,因爲它已針對此類進行了優化。否則,我認爲你的'array_filter'方法是'array_diff'對於invalids的最佳選擇 – Basic

+0

array_filter()獲得$ valids後跟array_diff()與原始數組和$ valids獲得無效數字 –

回答

2

array_filter()獲得有效的值後,使用array_diff()返回$input_array中不在$working陣列中的所有元素。

$input_array = array('04165555555', '02125555555'); 
$working = array_filter($input_array, function($el){ return preg_match('/^0?(416|426|412|424|414)(\d{7})$/i', $el); }); 
$not_working = array_diff($input_array, $working); 

輸出:

Valid: 
array(1) { [0]=> string(11) "04165555555" } 
Invalid: 
array(1) { [1]=> string(11) "02125555555" } 

Demo