private function extract(Connection $conn, array &$original, array &$extractor) { $keyset = []; foreach ($original as &$item) { if (isset($item[$extractor['key']])) { $keyset[] = $item[$extractor['key']]; } } if (sizeof($keyset) > 0) { $where = $extractor['query']->getWhere(); if (null === $where) { $extractor['query']->where(new QueryClause($extractor['matchingColumn'] . ' IN (' . implode(',', $keyset) . ')')); } else { $extractor['query']->where(QueryOperator::op('AND')->expr(new QueryClause($extractor['matchingColumn'] . ' IN (' . implode(',', $keyset) . ')'))->expr($where)); } $stmt = $extractor['query']->createStatement($conn); $retrieved = array(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $retrieved[$row[$extractor['matchingAlias']]] = $row; } $stmt->closeCursor(); } foreach ($original as &$item) { if (isset($item[$extractor['key']]) && isset($retrieved[$item[$extractor['key']]])) { foreach ($retrieved[$item[$extractor['key']]] as $key => $value) { $item[$extractor['prefix'] . ucfirst($key)] = $value; } } } }