/** * starts join * @return \qinq\Object\Query\Join */ public function execute() { $collection = $this->getCollection(); $fn = $this->getCallback(); $arr = $collection->toArray(); $args = $this->getArguments(); if (empty($fn) && count($args) === 1) { $this->group = [new qinq\Collection($arr), new qinq\Collection($args[0])]; } elseif (!empty($fn)) { $arr1 = array_filter($arr, $fn); $arr2 = array_diff($arr, $arr1); $this->group = [new qinq\Collection($arr), new qinq\Collection($arr2)]; } if (qtil\ArrayUtil::isIterable($this->group) && qtil\ArrayUtil::isMultiObject($this->group)) { return $this; } }
/** * Default XML query execution path * @return mixed */ function execute() { $result = parent::execute(); if (empty($result)) { return null; } $reduce = function ($val) { if (is_scalar($val)) { return $val; } elseif ($val instanceof \DOMDocument) { return $val; } elseif ($val instanceof \SimpleXMLElement) { return $val; } return $val; }; if (empty($this['xpath'])) { return $reduce($result[0]); } if (qtil\ArrayUtil::isMultiObject($result->toArray()) && count($result) == 1) { $val = $result[$result->keys()[0]]; return new qinq\Collection($val); } return $result->filter(); }