entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

Comparar dos arreglos

Hola que tal tengo una duda, hace un tiempo quise comparar dos arreglos, pero no pude, y ahora me llega la duda de nuevo.

Como comparar dos arreglos suponiendo que los quiero ordenar de una forma especifica.

Este seria el arreglo como estan los elementos
mi_arreglo_1 = [5,3,2,4,1]

Ete seria el arreglo ideal como me gustaria que quedara
mi_arreglo_2 = [1,2,3,4,5]

Y si por ejemplo lo requiero de otra forma desordenado, pero ordenarlo de una forma que cumpla mis nesecidades como
mi_arreglo_3 = [5,3,1,4,2]

Recordando que ya existe un arreglo llamado mi_arreglo_1 y que requiero cambiar su orden.

He pensado en recorrerlo areglo1 y arreglo2 con un for y luego comparar su primer valor, y si el valor de indice n es igual al indice n entonces almacenarlo en un nuevo arreglo, pero llega alpunto de que si dicho valor es igual como compara el que sigue, ya que si no coinciden como ir intercalando los valores para compararlos.

Espero averme dado entender y me pueda aclarar u poco, he visto que hay funciones de ordenamiento, pero solo de forma acendente o decendente, pero y si lo requiero como mi_arreglo_3 que podria hacer.
Lo estoy intentando en JavaScript y PHP.

Muchas Gracias.

1 Respuesta

2votos

magarzon Puntos22080

Hola.

En PHP tienes varias funciones para ordenar un array, dependiendo también si solo quieres ordenar por valores, por clave (si es un array asociativo), o estás ordenando cadenas.

En tu caso, que estás ordenando números, las que te interesan son:

  • sort: para ordenar de forma normal
  • rsort: para ordenar en orden inverso
  • usort: Para utilizar una función definida por ti

Ten en cuenta que todas estas funciones modifican el array original (es decir, no tienes que hacer un $arr = sort($arr), con sort($arr) vale, de hecho la respuesta es true o false).

En el caso de usort, la función recibe dos parámetros, y hay que devolver -1, 0 o 1 si el primer parámetro es respectivamente menor, igual o mayor que el segundo. Por ejemplo, para ordenar primero los pares y luego los impares sería así:

$test = [4, 6, 2, 1, 3];

usort($test, function($a, $b) {
    if ($a == $b) {
        return 0;
    }

    if ($a % 2 == 0) {
        //$a es par
        if ($b % 2 == 0) {
            //$b también, ordena de forma natural
            return $a < $b? -1 : 1;
        } else {
            //$b es impar, entonces $a tiene que ir antes ("es menor");
            return -1;
        }
    }
    if ($b % 2 == 0) {
        //$b es par y $a no (porque si $a es par, ya entró por el if anterior)
        //luego $b es menor
        return 1;
    }

    //Ambos son impares, ordenar de forma natural
    return $a < $b? -1 : 1;
});

Por su parte, en javascript tienes la función sort, que funciona de una forma parecida a la de PHP: sin pasarle parámetros, ordena de forma normal.

Pasándole una función como parámetro, ordena según lo que indique la función, de la misma forma que en PHP:

var arr = [4, 6, 2, 1, 3];

arr.sort(function(a, b) {
    if (a == b) {
        return 0;
    }

    if (a % 2 == 0) {
        if (b % 2 == 0) {
            return a < b? -1 : 1;
        } else {
            return -1;
        }
    }
    if (b % 2 == 0) {
        return 1;
    }

    return a < b? -1 : 1;
}

Saludos.

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

  • maribel ganó una medalla hace 13 horas

    Club de los 100 - Recibió un total de 100 puntos
  • hckmar ganó una medalla hace 2 días

    Antepasado - Primera visita hace más de 365 días
  • hckmar ganó una medalla hace 2 días

    Veterano - Primera visita hace más de 180 días
  • hckmar ganó una medalla hace 2 días

    Regular - Primera visita hace más de 90 días
  • javicholbi ganó una medalla hace 3 días

    Buena Pregunta - Recibió +1 votos en pregunta
  • javicholbi ganó una medalla hace 3 días

    Antepasado - Primera visita hace más de 365 días
  • javicholbi ganó una medalla hace 3 días

    Veterano - Primera visita hace más de 180 días
  • javicholbi ganó una medalla hace 3 días

    Regular - Primera visita hace más de 90 días
  • Botxtrem-Solutions ganó una medalla hace 3 días

    Buena Pregunta - Recibió +1 votos en pregunta
...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta