public function filter($filterer, $op = '===') { if (is_array($filterer)) { $ops = array('===' => function ($item) use($filterer) { foreach ($filterer as $property => $value) { if (Collection::value($item, $property) !== $value) { return false; } } return true; }, '!==' => function ($item) use($filterer) { foreach ($filterer as $property => $value) { if (Collection::value($item, $property) === $value) { return false; } } return true; }); $callback = $ops[$op]; } elseif (is_callable($filterer)) { $callback = $filterer; } if (isset($callback)) { $this->store = array_filter($this->store, $callback); } return $this; }