Parece que no puedo entender la clasificación de la colección laravel, por lo que los datos empty / null terminarían siendo los últimos. (un poco confundido acerca de usort)
Prácticamente todo lo que tengo es un montón de times / timestamps de tiempo que deben ordenarse. Algunas filas pueden no tener para esa columna.
Me gustaría que los datos aparezcan ASC / ascending mientras que los datos empty/null se muestran al final.
$collection->sortBy('timestamp') ordena bien pero no sabe cómo manejar los campos vacíos.
La mesa se ve así.
$data = $data->sort(function($a, $b) use ($sortBy) { if ($a->{$sortBy} and $b->{$sortBy}) return 0; return ($a->{$sortBy} > $b->{$sortBy}) ? -1 : 1; }); Código aleatorio que probé de Internet, que no puedo hacer que funcione correctamente. $sortBy contiene un nombre de campo para ordenar (ya que puede cambiar) El código defectuoso trata con datos vacíos/nulos pero está fuera de servicio. 
Tiene que usar sort() con un cierre. A continuación, ordenará la marca de tiempo ASC con NULL al final.
$sorted = $collection->sort(function ($a, $b) { if (!$a->timestamp) { return !$b->timestamp ? 0 : 1; } if (!$b->timestamp) { return -1; } if ($a->timestamp == $b->timestamp) { return 0; } return $a->timestamp < $b->timestamp ? -1 : 1; });Probar:
$collection->sortBy('-timestamp')
¿Funciona?
Tuve un problema similar. En mi caso, el atributo de time de $result podría ser NULL . Actúa como si NULL fuera 0 (como int ) y ese es el comportamiento esperado. Pero también quería ordenar la colección dejando NULL en último lugar.
$collection->sortBy(function ($result) { if ($result['time'] === NULL) { return PHP_INT_MAX; } return $result['time']; }); Puede lograr esto simplemente devolviendo un valor más alto en el orden alfabético en comparación con todos los demás valores en la matriz. es decir PHP_INT_MAX para estar seguro. Esto asegurará que todos los resultados donde el time sea igual a NULL estén al final de la matriz.