Una breve introducción

Ya os conté en el post anterior sobre el operador coelspacing o como lo llaman funsión de null , es más chulo coelspacing es como llamar arreglo a los arrays. Pero el operador nave espacial o Spaceship ya es otra cosa.

¿En que? Pues en el ordenar valores en arrays tanto los de una dimensión como de varias, de esta forma es como le sacaremos el mayor provecho. Pero como se suele decir, vamos por partes.

Operador Spaceship

Este operador compara dos valores y señala cual es el mayor, mejor o igual, de forma elemental, ¿Que me refiero con esto? Sin necesidad de funciones sino como un operador. Se basa en las comparaciones de tipo. Por consiguiente tenemos :

  • 1, si el primer elemento es mayor que el segundo.
  • -1, si el primero elemento es menor que el segundo.
  • 0, si los elementos son iguales.

Un ejemplo :

 0; // 0
echo 0 <=> -1; // -1
echo 1 <=> 0; // 1

// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "c"; // -1
echo "c" <=> "a"; // 1
?>

¿Para que se puede usar?

Una vez sabemos esto, tenemos que pensar ¿Esto en que nos ayuda? en mucho.

Cuando usamos una función con callback en uasort por ejemplo.

Las mejoras en uasort

Por lo general se usa este código para ordenar una función.

// Función de comparación
function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
$array = ["Porche","BMW","Mercedes","Citroen","Buggati"];
uasort($array, 'cmp');

Pero con el operador Spaceship, podemos meter una mejora. Como ya sabemos esta función, retorna los siguientes valores :

  • Si es 1 , el valor $a es mayor que $b.
  • Si es -1 , el valor $a es menor que $b.
  • Si es 0, el valor $a es igual a $b.

Pues ya podemos comprender que nos da el mismo aporte <=> que el contenido de la función anterior.

function cmp($a, $b) {
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

Se puede reducir en :

function cmp($a, $b) {
    return ($a <=> $b);
}

Ahora pongamos el caso de un array multidimensional :

// Función de comparación
function cmp($a, $b) {
    $retorno = ($a["marca"] <=> $b["marca"]);
    return ($retorno === 0)?($a["matricula"] <=> $b["matricula"]):$retorno;
}
// Array a ser ordenado
$array = [
    ["marca" => "Porche","matricula" => "1234 BB"],
    ["marca" => "Mercedes","matricula" => "3214 AA"],
    ["marca" => "Mercedes","matricula" => "2332 AA"],
    ["marca" => "Mercedes","matricula" => "xxxx AA"],
    ["marca" => "Bugatti","matricula" => "3421 CS"],
];

Conclusión

Los ejemplos es para mostrar que podemos ordenar todo de una forma elegante. Con el nuevo PHP 7 estas son las mejoras que nos traen que harán que tengamos una programación más elegante y práctica

07-06-2020