Cómo Ordenar un Array Multidimensional en PHP

Tengo datos CSV cargados en un array multidimensional. De esta manera cada "fila" es un registro y cada "columna" contiene el mismo tipo de datos. Estoy utilizando la siguiente función para cargar mi archivo CSV.

function f_parse_csv($file, $longest, $delimiter)
{
  $mdarray = array();
  $file    = fopen($file, "r");
  while ($line = fgetcsv($file, $longest, $delimiter))
  {
    array_push($mdarray, $line);
  }
  fclose($file);
  return $mdarray;
}

Necesito ser capaz de especificar una columna para ordenar de modo que reorganiza las filas. Una de las columnas contiene información de fecha en el formato Y-m-d H:i:s y me gustaría poder ordenar con la fecha más reciente en la primera fila.

Con usort. He aquí una solución genérica, que puede utilizar para diferentes columnas:

class TableSorter {
  protected $column;
  function __construct($column) {
    $this->column = $column;
  }
  function sort($table) {
    usort($table, array($this, 'compare'));
    return $table;
  }
  function compare($a, $b) {
    if ($a[$this->column] == $b[$this->column]) {
      return 0;
    }
    return ($a[$this->column] < $b[$this->column]) ? -1 : 1;
  }
}

Para ordenar por la primera columna:

$sorter = new TableSorter(0); // sort by first column
$mdarray = $sorter->sort($mdarray);
Comentarios (4)

La función "Usort" es su respuesta.
http://php.net/usort

Comentarios (1)

Yo prefiero usar array_multisort. Consulte la documentación aquí.

Comentarios (0)