2012-03-26 20 views
7

Tengo una matriz PHP que tiene este aspecto:PHP matriz tipo 2d alfabéticamente por valor anidado

Array{ 
    [0] { 
     'id'  => '0', 
     'title' => 'foo', 
     'address' => '123 Somewhere', 
    } 
    [1] { 
     'id'  => '1', 
     'title' => 'bar', 
     'address' => '123 Nowhere', 
    } 
    [2] { 
     'id'  => '2', 
     'title' => 'barfoo', 
     'address' => '123 Elsewhere', 
    } 
    [3] { 
     'id'  => '3', 
     'title' => 'foobar', 
     'address' => '123 Whereabouts', 
    } 
} 

y quiero a solucionar el problema por el 'título' clave en las matrices anidadas, al tener este aspecto:

Array{ 
    [1] { 
     'id'  => '1', 
     'title' => 'bar', 
     'address' => '123 Nowhere', 
    } 
    [2] { 
     'id'  => '2', 
     'title' => 'barfoo', 
     'address' => '123 Elsewhere', 
    } 
    [0] { 
     'id'  => '0', 
     'title' => 'foo', 
     'address' => '123 Somewhere', 
    } 
    [3] { 
     'id'  => '3', 
     'title' => 'foobar', 
     'address' => '123 Whereabouts', 
    } 
} 

los valores clave de primer nivel no importan ya que estoy hacer el seguimiento de cada matriz anidada a través de la clave anidada 'id'.

He jugado con ksort() pero sin éxito.

+1

posible duplicado de [PHP matriz multidimensional especie por valor] (http://stackoverflow.com/questions/2699086/php-sort- multidimensional-array-by-value) –

Respuesta

30

Debe utilizar usort() (estoy suponiendo PHP 5.3+ aquí):

usort($your_array, function ($elem1, $elem2) { 
    return strcmp($elem1['title'], $elem2['title']); 
}); 

Editar: que no había notado que quería conservar la asociación de índices, lo que en realidad necesita utilizar uasort() en cambio, con los mismos parámetros.

Edit2: Aquí está el pre-PHP 5.3 versión:

function compareElems($elem1, $elem2) { 
    return strcmp($elem1['title'], $elem2['title']); 
} 

uasort($your_array, "compareElems"); 
+1

Perfecto, eso es exactamente lo que necesitaba. Hay algunas soluciones alternativas en SO, pero esto parece más elegante que la mayoría (o todas) de ellas. – melat0nin

+0

Hmm acabo de transferir a un servidor con PHP <5.3, por lo que la función incrustada no funciona ... ¿cómo podría refactorizar esto para lograr el mismo efecto con la función() fuera de uasort? – melat0nin