2013-04-02 14 views
8

Mam jedno array (dynamicznie utworzony), który zawiera następujące numeryphp array numerycznej wybierz wartości większe niż liczba i niższe niż inny i zapisać go do nowej tablicy

$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) 

Chcę utworzyć nową tablicę (filtrowane) o> = i = < na przykład nowa tablica Zawartości liczby większe lub równe (> =), niż 800 i mniejsze lub równe (< =) niż 1600

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

to możliwe bez użycia foreach?

+0

array_filter() z zwrotnego –

+1

^'array_filter ($ liczby, funkcja ($ n) {powrotu $ n> = 800 && $ n <= 1600}' – elclanrs

+0

tak! Nie wiedziałem, jak przekazać dwie zmienne do array_filter. dzięki Wam obojgu! – AkisC

Odpowiedz

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

Nigdy wcześniej nie wiedziałem o 'use()'! Dziękuję Ci bardzo! –

+1

@CJDennis - znacząca różnica polega na tym, że zmienne "use" ('$ min' i' $ max') są ustalone (i tak musi istnieć) w punkcie, w którym zdefiniowana jest funkcja anonimowa/lambda, podczas gdy normalne argumenty (w przypadek '$ value') jest przekazywany, gdy funkcja jest wywoływana .... nie robi to dużej różnicy w tym przypadku, ale może w innych przypadkach –

+1

Inną różnicą jest to, że wywołanie zwrotne dla array_filter() akceptuje tylko specyficzne zestaw argumentów lub argumentów (możesz przekazać klucz również w najnowszych wersjach PHP), więc musisz użyć 'use' w takim przypadku, aby przekazać dodatkowe argumenty do funkcji –

0

Skrypt ten zawiera błędy składni: Błąd

składni, nieoczekiwane „} '

ten pracował:

array_filter($numbers, function($n){ 
    return $n >= 800 && $n <= 1600; 
}); 
Powiązane problemy