2013-04-02 4 views
8

ho un array (creato in modo dinamico), che contiene i seguenti numeriphp array numerico selezionare i valori maggiori di un numero e inferiori di un altro e salvarlo in un nuovo array

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

Voglio creare nuovo array (filtrata) da> = e < = per esempio il nuovo sistema in contiene numeri maggiore o uguale (> =) di 800 e inferiore o uguale (= <) di 1600

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

è possibile farlo senza usare foreach?

+0

array_filter() con un callback –

+1

^'array_filter ($ numeri, la funzione ($ n) {return $ n> = 800 && $ n <= 1600}' – elclanrs

+0

sì! Non sapevo come passare due variabili a array_filter. grazie a tutti e due! – AkisC

risposta

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

Non ho mai saputo di 'use()' prima! Grazie mille! –

+1

@CJDennis - la differenza significativa è che i valori delle variabili "use" ('$ min' e' $ max') sono fissi (e quindi devono esistere) nel punto in cui è definita la funzione anonimo/lambda, mentre gli argomenti normali (in questo caso '$ valore') vengono passati quando viene chiamata la funzione .... non fa molta differenza in questo caso, ma potrebbe in altri casi –

+1

L'altra differenza è che il callback per array_filter() accetta solo uno specifico argomento o argomento impostato (è possibile passare la chiave anche nelle versioni recenti di PHP), quindi è necessario utilizzare 'use' in tal caso per passare argomenti aggiuntivi alla funzione –

0

Questo script contiene errori di sintassi: errore

sintassi, inaspettate '} '

questo ha funzionato:

array_filter($numbers, function($n){ 
    return $n >= 800 && $n <= 1600; 
}); 
Problemi correlati