Ordenando un array multidimensional por un campo en PHP

Aunque había pensado publicar “como hacer una encuesta en la que no pueda votar ni dios para así poder inventarte el resultado tranquilo” no lo haré porque se me han adelantado los del diario ABC. En lugar de eso he pensado que a alguien podría interesarle una función que ordene un array multidimensional por un campo en concreto.

La función en si recibirá tres parámetros: el array, el nombre del campo y un valor booleano que indique si se querrá en orden inverso o no. Podéis ver este ejemplo de código:

function orderMultiDimensionalArray ($array, $campo, $invertir) {
    $posicion = array();
    $newRow = array();
    foreach ($array as $key => $row) {
            $posicion[$key]  = $row[$campo];
            $newRow[$key] = $row;
    }
    if ($invertir) {
        arsort($posicion);
    }
    else {
        asort($posicion);
    }
    $arrayRetorno = array();
    foreach ($posicion as $key => $pos) {
        $arrayRetorno[] = $newRow[$key];
    }
    return $arrayRetorno;
}

La función asort ordena un array por los valores que contiene en orden de menor a mayor (si hay valores numéricos los pondrá antes que los alfabéticos). El caso de arsort es el mismo sólo que inverso, ordena de mayor a menor.

Ya véis que es sencillo y no tiene mucha ciencia. Existe también la función ksort (con su versión “reverse”, la función krsort) que también ordena, pero en lugar de ordenenar por el valor lo hace por el índice.

Anuncios

3 comentarios en “Ordenando un array multidimensional por un campo en PHP

  1. Ale

    gracias por la información. Quería comentarte que tienes un error en la función en el parámetro $position que se le pasa al foreach, esta declarado previamente como $posicion. Si ejecutas tu funcion tal cual devuelve error el interprete de php. Saludos

Responder

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. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s