/** * Where statement * Limits query result using expression */ function execute() { $query = $this->getQuery(); $args = $this->getArguments(); $name = $args[0]; $section = null; if (strpos($name, '.') !== false) { list($section, $name) = explode('.', $name); } $value = null; if (isset($args[1])) { $value = $args[1]; } $query->attach(xral\Stream\Query::COMPLETE, function ($s, $e) use($name, $value, $section) { $result = $e['result']; if (!is_null($section)) { if (isset($result[$section])) { $result = new qinq\Collection([$section => $result[$section]]); } } $result->where(function ($data) use($name, $value) { if (!is_null($value)) { return array_key_exists($name, $data) && $data[$name] == $value; } else { return array_key_exists($name, $data); } }); $e['result'] = $result; }); }
function testIntegratedQueryWhereKeys() { $numbers = new qinq\Collection(['bob' => 1, 'jim' => 2, 'sam' => 3, 'joe' => 4, 'jack' => 5]); $numbers->where(function ($n, $k) { return strlen($k) == 3; }); $this->assertEquals(4, count($numbers)); }