Sort filter en un QueryString con PHP


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

Anuncio publicitario

Publicado por Codelaby

Mobile DevDesigner

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: