Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

249
Vistas
Ordenando la colección laravel dejando nulo/vacío al final

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.

datos

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. defectuoso

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

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; });
about 4 years ago · Santiago Trujillo Denunciar

0

Probar:

$collection->sortBy('-timestamp')

¿Funciona?

about 4 years ago · Santiago Trujillo Denunciar

0

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.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda