2013-04-02 29 views
8

Tôi đã một mảng (tự động tạo ra) có chứa những con số sau đâymảng số chọn giá trị php lớn hơn một số và thấp hơn khác và lưu nó vào một mảng mới

$numbers = array (200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 12000, 14000, 15000, 16000, 18000, 20000, 21000, 24000, 25000, 27000, 30000, 35000, 40000, 45000, 50000, 60000, 70000, 75000, 80000, 90000, 100000, 105000, 120000, 135000, 140000, 150000, 160000, 180000, 200000, 250000, 300000, 350000, 400000, 450000, 500000, 600000, 700000, 800000, 900000, 1000000) 

Tôi muốn tạo mảng mới (lọc) bằng> = và < = ví dụ như mảng mới để chứa số lớn hơn hoặc bằng (> =) so với 800 và thấp hơn hoặc bằng (< =) so với 1600

New Array 
(
    [0] => 800 
    [1] => 1000 
    [2] => 1200 
    [3] => 1400 
    [4] => 1600 
) 

là tốt mà không sử dụng foreach?

+0

array_filter() với một callback –

+1

^'array_filter ($ số, function ($ n) {return $ n> = 800 && $ n <= 1600}' – elclanrs

+0

có! Tôi không biết làm thế nào để vượt qua hai biến để array_filter. cảm ơn cả hai bạn! – AkisC

Trả lời

14
$min = 800; 
$max = 1200; 
$newNumbers = array_filter(
    $numbers, 
    function ($value) use($min,$max) { 
     return ($value >= $min && $value <= $max); 
    } 
); 
+0

Tôi chưa bao giờ biết về 'use()' trước đây! Cảm ơn nhiều! –

+1

@CJDennis - sự khác biệt đáng kể là "sử dụng" giá trị biến ('$ min' và' $ max') được cố định (và vì vậy phải tồn tại) tại điểm mà hàm ẩn danh/lambda được xác định, trong khi đối số bình thường (trong trường hợp này '$ value') được truyền khi hàm được gọi .... nó không tạo ra nhiều khác biệt trong trường hợp này, nhưng có thể trong các trường hợp khác –

+1

Sự khác biệt khác là gọi lại cho mảng_filter() chỉ chấp nhận một hàm cụ thể đối số hoặc đối số được thiết lập (bạn có thể chuyển khóa cũng như trong các phiên bản PHP gần đây), vì vậy bạn cần sử dụng 'use' trong trường hợp đó để chuyển các đối số bổ sung cho hàm –

0

Kịch bản này có lỗi cú pháp: Lỗi

cú pháp, bất ngờ '} '

này làm việc:

array_filter($numbers, function($n){ 
    return $n >= 800 && $n <= 1600; 
}); 
Các vấn đề liên quan