Ejemplo de como implmentar un sort filter que opera sobre un query string, petición de un API end point, basado en el diseño RHS (Right Hand Side)
Operadores Sort Filter
- :asc para ordernar de a-z o de 0-9
- :desc para ordenar de z-a o de 9-0
Funciones y Clases
Funciones de validación del operador, extración de datos y parseo del query string
class SortParam {
public string $fieldName = "", $operator = "asc";
public function __construct(string $fieldName, string $operator) {
$this->fieldName = $fieldName;
$this->operator = $operator;
}
}
function getFieldRHS($s) {
preg_match('/([[:word:]]+):/', $s, $match);
return $match[1];
}
function isSortParamRHS($field) {
return preg_match('/([[:word:]]+):\b(asc|desc)\b/', $field);
}
function getOperatorRHS($s) {
preg_match('/:\b(asc|desc|eq|lt)\b/', $s, $match);
return $match[1];
}
function parserSortRHS($s) {
$s_split = explode(',', $s);
$arr = [];
foreach ($s_split as $row) {
if (isSortParamRHS($row)) {
$arr[] = new SortParam(getFieldRHS($row), getOperatorRHS($row));
//$arr[getFieldRHS($field)] = getOperatorRHS($field);
}
}
return $arr;
}
Su uso
Al recibir un query string obtenemos el parámetro sort_filter, luego le aplicamos el parserSortRHS para obtener un array con el campo y el operador
$s1 = "siteRole:asc,name:desc";
$s = $s1;
echo('sort_filter=' . $s . PHP_EOL);
$data = parserSortRHS($s);
print_r($data);
salida
sort_filter=siteRole:asc,name:desc
Array
(
[0] => SortParam Object
(
[fieldName] => siteRole
[operator] => asc
)
[1] => SortParam Object
(
[fieldName] => name
[operator] => desc
)
)
Banco de prueba online SortFilter querystring with PHP