PHP: emulare il metodo grep() di jQuery utilizzando le closure

PHP: emulare il metodo grep() di jQuery utilizzando le closure

PHP 5.3 ha introdotto una caratteristica comune in JavaScript, ossia le closure. Le closure, come in JavaScript, non sono altro che funzioni anonime che possono essere create al volo o assegnate ad una variabile. In questo articolo vedremo come sfruttare questa nuova caratteristica per implementare la versione PHP del metodo grep() di jQuery.

La funzione che andremo a creare accetta una funzione anonima come parametro (quest'ultima deve essere di tipo closure) che andrĂ  ad operare su tutti gli elementi dell'array passato come primo parametro. Questa funzione restituirĂ  l'array filtrato:


function grep(Array $elems, Closure $callback, $inv = false) {
    
    $ret = array();
    $retVal;
    $inv = !!$inv;
    
    for ($i = 0, $length = count($elems); $i < $length; $i++) {
        $retVal = call_user_func($callback, $elems[$i], $i);
        if ($inv !== $retVal) {
            $ret[] = $elems[$i];
        }
    }
    
    return $ret;
    
}

Esempio pratico:


$arr = array(1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1);

print_r($arr);
// 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1

$arr = grep($arr, function($n, $i) {
    return ($n != 5 && $i > 4);
});

print_r($arr);
// 1, 9, 4, 7, 3, 8, 6, 9, 1

Documentazione

  1. Funzioni anonime
  2. La classe Closure
Torna su