PHP ordena la matriz alfabéticamente usando un valor de subarreglo [duplicate]

2 minutos de lectura

avatar de usuario
usuario6

Posible duplicado:

¿Cómo puedo ordenar matrices y datos en PHP?
¿Cómo ordeno una matriz multidimensional en php?
PHP Ordenar matriz por valor de submatriz
PHP ordena una matriz multidimensional por valor

Mi matriz se parece a:

Array(
    [0] => Array(
         [name] => Bill
         [age] => 15
    ),
    [1] => Array(
         [name] => Nina
         [age] => 21
    ),
    [2] => Array(
         [name] => Peter
         [age] => 17
    )
);

Me gustaría ordenarlos en orden alfabético según su nombre. Vi PHP Sort Array By SubArray Value pero no ayudó mucho. ¿Alguna idea de como hacer esto?

  • La pregunta que vinculó contiene la respuesta exacta que necesita … simplemente reemplace 'optionNumber' con 'name' en la función de comparación. Votación para cerrar como duplicado. Si hay algo en la otra pregunta que no entiende, pregunte específicamente sobre eso.

    – Mike B.

    7 mayo 2012 a las 15:21


  • Nunca he visto una matriz que tenga la misma clave para dos valores. ¿Probablemente es por eso que el tipo no funciona?

    – hakré

    7 mayo 2012 a las 15:29

avatar de usuario
Marian Zburlea

Aquí está tu respuesta y funciona al 100%, lo he probado.

<?php
$a = Array(
    1 => Array(
         'name' => 'Peter',
         'age' => 17
    ),
    0 => Array(
         'name' => 'Nina',
         'age' => 21
    ),
    2 => Array(
         'name' => 'Bill',
         'age' => 15
    ),
);
function compareByName($a, $b) {
  return strcmp($a["name"], $b["name"]);
}
usort($a, 'compareByName');
/* The next line is used for debugging, comment or delete it after testing */
print_r($a);

  • Todo en una línea: usort($array, function($a, $b){ return strcmp($a[“name”]$b[“name”]); });

    – pmrotule

    26 de febrero de 2014 a las 15:56

  • @pmrotule: Solo para versión > PHP 5.3

    – Mohit

    31 de julio de 2014 a las 18:53

  • Vale la pena señalar que strcmp distingue entre mayúsculas y minúsculas. Me tomó un tiempo descubrir por qué ordenar alfabéticamente no estaba dando los resultados esperados. Cambié el código anterior para devolver lo siguiente: return strcmp(strtolower($a[“name”]), strtolower($b[“name”]));

    – Andrés

    02/03/2015 a las 19:27


  • @Andrew, también puedes usar la función strcasecmp para esto. Compara cadenas sin distinguir entre mayúsculas y minúsculas. Ver php.net/manual/en/function.strcasecmp.php

    – Brian

    26 de marzo de 2015 a las 11:46


  • Esto funciona perfectamente hasta que especifique el método de comparación dentro del alcance del método que está utilizando

    -Juliyanage Silva

    24 de febrero de 2017 a las 9:08

usort es tu amigo:

function cmp($a, $b)
{
        return strcmp($a["name"], $b["name"]);
}

usort($array, "cmp");

  • si queremos la edad, ¿qué cambio se realizará en función de cmp en lugar de strcmp?

    – Bhavin Thummar

    8 de abril de 2019 a las 14:11

  • @BhavinThummar Simplemente return $a["age"] - $b["age"].

    – ccKep

    08/04/2019 a las 18:53

  • Gracias @ccKep. He resuelto mi problema usando esta solución.

    – Bhavin Thummar

    10 de abril de 2019 a las 4:59

¿Ha sido útil esta solución?