PHP: ordena una matriz multidimensional por otra matriz
⏰ 3 minutos de lectura
megaéxito
Estoy tratando de ordenar una matriz multidimensional por otra matriz, pero hasta ahora me he quedado corto. array_multisort parece estar funcionando solo para la clasificación real.
Puedo lograr esto fácilmente ejecutando un bucle anidado, pero eso no escalaría bien (mi matriz es bastante grande y las matrices tienen muchos más campos).
Mridul
Así sería como lo haría. Usaría una función usort personalizada (arr_sort) junto con la matriz $data.
No puedo usar funciones anónimas con mi versión actual de php. ¿Cómo funcionaría esto sin usarlas?
– GWed
27 de noviembre de 2012 a las 17:17
he abierto una pregunta aquí stackoverflow.com/questions/13589707/…
– GWed
27 de noviembre de 2012 a las 17:40
Jan Henk
En su ejemplo, los identificadores en la matriz $data están numerados consecutivamente y comienzan en 1. El código que doy a continuación asume que este es siempre el caso. Si este no es el caso, el código no funciona.
Al llamar a array_flip() en la matriz $order, se puede usar para buscar posiciones. Esto es como una búsqueda de tabla hash, que es lineal en el tiempo u O(n). No puedes hacerlo mejor.
Su última solución es básicamente ejecutar un bucle anidado azucarado. No creo que escalaría bien.
– Megaéxito
19 de octubre de 2011 a las 0:01
@MegaHit ve el código actualizado en mi respuesta, no puedes hacerlo mejor que eso.
– Jan Henk
19 de octubre de 2011 a las 10:09
justin lucas
Podría intentar usar una ordenación personalizada con usort(). De esta manera, puede usar la primera matriz para determinar el orden de la segunda matriz.
Su última solución es básicamente ejecutar un bucle anidado azucarado. No creo que escalaría bien.
– Megaéxito
19 de octubre de 2011 a las 0:01
@MegaHit ve el código actualizado en mi respuesta, no puedes hacerlo mejor que eso.
– Jan Henk
19 de octubre de 2011 a las 10:09
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información