Ordenar matriz multidimensional con la tecla específica
Pregunta
Tengo una matriz:
Array (
[0] => stdClass Object (
[user_id] => 1
[ID] => 1
[user_login] => admin
[display_name] => admin
[user_email] => webbinformation@nacka.se
[meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";}
)
[1] => stdClass Object (
[user_id] => 4
[ID] => 4
[user_login] => ungtinflytande
[display_name] => ungtinflytande
[user_email] => klarakviberg@gmail.com
[meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";}
)
[2] => stdClass Object (
[user_id] => 5
[ID] => 5
[user_login] => inflytandepilot
[display_name] => inflytandepilot
[user_email] => hildalundgren@hotmail.com
[meta_value] => a:1:{s:6:\"author\";s:1:\"1\";}
)
[3] => stdClass Object (
[user_id] => 11
[ID] => 11
[user_login] => matsbohman
[display_name] => matsbohman
[user_email] => mats.bohman@nacka.se
[meta_value] => a:1:{s:6:\"editor\";s:1:\"1\";}
)
[4] => stdClass Object (
[user_id] => 12
[ID] => 12
[user_login] => klarakviberg
[display_name] => klarakviberg
[user_email] => nastasteg@nacka.se
[meta_value] => a:1:{s:13:\"administrator\";s:1:\"1\";}
)
)
... que quiero ordenar por la clave display_name
. Actualmente lo imprimo así:
foreach ($blogusers as $bloguser) {
...
}
¿Cómo se hace esto?
Solución
usaría usort () - http://php.net/usort
Mi sugerencia sería:
function cmp($a, $b)
{
return strcmp($a->display_name, $b->display_name);
}
usort($blogusers, "cmp");
foreach ($blogusers as $bloguser)
{
...
Otros consejos
Ver usort: http://php.net/manual/en/function.usort .php
usort($array, "my_cmp");
function my_cmp($a, $b) {
if ($a->display_name == $b->display_name) {
return 0;
}
return ($a->display_name < $b->display_name) ? -1 : 1;
}
Tengo encontrar respuesta en https: // joshtronic. com / 2013/09/23 / clasificación asociativo-array-específica de clave /
function sortBy($field, &$array, $direction = 'asc')
{
usort($array, create_function('$a, $b', '
$a = $a["' . $field . '"];
$b = $b["' . $field . '"];
if ($a == $b)
{
return 0;
}
return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1;
'));
return true;
}
Y ahora llaman a esta función mediante la clave de la matriz específica.
$newArray = sortBy('display_name', $blogusers);
Y si una especie de asc / desc sólo tiene que añadir un argumento,
sortBy('display_name', $blogusers, 'desc');
Su gama se ve como el resultado de una consulta de base de datos. Si este es el caso, dejar que la base de datos hacer la clasificación:. ORDER BY display_name
simplemente anexados para la consulta ??p>
Tome un vistazo a siguiente artículo. Sí describe cómo utilizar usort()
y también describe cómo utilizar create_function()
para que pueda utilizar una sola función para ordenar en diferentes campos (con asc
dirección requerida o desc
).
http://phpave.com/sorting-associative-array-specific- clave /