public function multipleKeyAndValueHandler($key, $value, $expr)
{
if (!strpos($key, '|||')) {
return null;
}
$keys = preg_split('/ *(\\|\\|\\|) */', $key);
$inputKeys = $keys;
$values = preg_split('/ *(\\|\\|\\|) */', $value);
$values = array_pad($values, count($keys), end($values));
$filterParams = [];
$parts = [];
$count = 1;
while (($key = array_shift($keys)) && ($val = array_shift($values))) {
$multipleValue = $this->multipleValueHandler($key, $val, $this->expr);
if ($multipleValue) {
$filter = $multipleValue->getExpression();
$filterParams = $filterParams + $multipleValue->getParameters();
} else {
$val = $this->parseValue($val);
$placeholder = $key . '_' . $count;
$filterParams[$placeholder] = $val['value'];
$exprMethod = $val['operator'];
$filter = $this->expr->{$exprMethod}($this->alias . $key, ':' . $placeholder);
}
$parts[] = $filter;
$count++;
}
$filter = new Filter();
$filter->setKey($inputKeys);
$filter->setExpression(call_user_func_array([$expr, 'orX'], $parts));
$filter->setParameters($filterParams);
return $filter;
}