Jeder der schonmal mit PHP in Berührung kam kennt vermutlich array_filter. Dieses kleine Schmuckstück ist manchmal ganz praktisch, kann jedoch nicht mit assoziativen Arrays umgehen. Die PHP SPL bietet jedoch seit Version 5.1 eine nette Alternative: Den FilterIterator

Diese Iterator-Klasse ist abstrakt und muss erst für die eigenen Zwecke näher spezifiziert werden bevor man sie nutzen kann.

callback = $callback;
        parent::__construct($iterator);
    }
    public function accept()
    {
        return call_user_func($this->callback, $this->key(), $this->current());
    }
}
$arrayToFilter = array(
    'key1' => 1,
    'key2' => 2,
    'key3' => 4
);
$filterIterator = new FilterIteratorWithCallback(
    new \ArrayIterator($arrayToFilter),
    function ($key, $value) { return substr($key, 3) == $value; }
);
foreach ($filterIterator as $key => $value) {
    echo $key . PHP_EOL;
}

Seit Version 5.4 bietet PHP auch die Klasse CallbackFilterIterator an, mit der sich obiger Code noch weiter verkürzen lässt:

 1,
    'key2' => 2,
    'key3' => 4
);
$filterIterator = new \CallbackFilterIterator(
    new \ArrayIterator($arrayToFilter),
    function ($value, $key, $iterator) { return substr($key, 3) == $value; }
);
foreach ($filterIterator as $key => $value) {
    echo $key . PHP_EOL;
}
Johannes Meyer
Johannes Meyer
Developer

Johannes ist seit 2011 bei uns und hilft bei der Entwicklung zukünftiger Knüller (Icinga2, Icinga Web 2, ...) aus dem Hause NETWAYS.