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;
}
0 Comments