Cómo ordenar un array por varios campos

Código PHP

PHP – Array – Sort

Función que nos permite ordenar un array por varios campos, tanto de forma ascendente, descendente, de forma natural o insensible a los acentos.

/**
 * Devuelve un array ordendo por las columna o columnas que queramos
 *
 * @return mixed
 */
function sortMultiValue()
{
    $args = func_get_args();
  
    $data = array_shift($args);
  
    foreach ($args as $n => $field) {
  
        if (is_string($field)) {
  
            $tmp = array();
  
            foreach ($data as $key => $row) {
                $tmp[ $key ] = $row[ $field ];
            }
  
            $args[ $n ] = $tmp;
        }
    }
  
    $args[] = &$data;
  
    call_user_func_array('sortMultiValue', $args);
  
    return array_pop($args);
}

Ejemplos de como utilizar esta función

/* Ordenación por un campo */
sortMultiValue($arr_tmp, 'estado', SORT_DESC);
/* Ordenación por varios campos */
sortMultiValue($arr_tmp, 
              'visitas',  SORT_ASC | SORT_NATURAL | SORT_FLAG_CASE,
              'llamadas', SORT_ASC | SORT_NATURAL | SORT_FLAG_CASE);

Array
(
    [0] => Array
        (
            [cliente] => CLIENTE 1
            [asociacion] => ASOC 1
            [estado] => CANDIDATO
            [comercial] => NOMBRECOM
            [visitas] => 0
            [llamadas] => 5
            [emails] => 0
            [cliid] => d4251ec1-1d72-2896-605b-55c33995b6cd
            [acid] => 626b079c-e7e6-8f6f-d9c1-55c338eb09ab
        )

    [1] => Array
        (
            [cliente] => CLIENTE 20
            [asociacion] => ASSOC 20
            [estado] => CANDIDATO
            [comercial] => NOMBECOM
            [visitas] => 0
            [llamadas] => 0
            [emails] => 1
            [cliid] => d42513ee-a68a-1555-6546-55c33665e939
            [acid] => 4ea16685-4f91-cc22-dd0a-55c33406fa2e
            [llamdas] => 1
        )

    [2] => Array
        (
            [cliente] => CLIENTE 5
            [asociacion] => ASSOC 10
            [estado] => CANDIDATO
            [comercial] => ORTO
            [visitas] => 1
            [llamadas] => 4
            [emails] => 2
            [cliid] => f329b20a-eeef-10a0-17e4-55c1e7f30deb
            [acid] => 56c2a30f-a897-60bc-0c6a-55c1dbd00647
        )

)