php - krsort - Clasificar matriz multidimensional por clave específica
sort associative multidimensional array php (5)
Tengo una matriz:
Array (
[0] => stdClass Object (
[user_id] => 1
[ID] => 1
[user_login] => admin
[display_name] => admin
[user_email] => [email protected]
[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] => [email protected]
[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] => [email protected]
[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] => [email protected]
[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] => [email protected]
[meta_value] => a:1:{s:13:/"administrator/";s:1:/"1/";}
)
)
... que quiero ordenar por la clave display_name
. Actualmente lo imprimo de esta manera:
foreach ($blogusers as $bloguser) {
...
}
¿Cómo hago esto?
Eche un vistazo al siguiente artículo. Describe cómo usar usort()
y también describe cómo usar create_function()
para que pueda usar una sola función para ordenar en diferentes campos (con la dirección requerida asc
o desc
).
He encontrado respuesta en https://joshtronic.com/2013/09/23/sorting-associative-array-specific-key/
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 llame a esta función mediante una clave de matriz específica.
$newArray = sortBy(''display_name'', $blogusers);
Y si ordena asc / desc simplemente agrega un argumento,
sortBy(''display_name'', $blogusers, ''desc'');
Su matriz se parece al resultado de una consulta de base de datos. Si este es un caso, deje que la base de datos haga la clasificación: simplemente agregue ORDER BY display_name
a la consulta.
Utilizarí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)
{
...
Ver la conexión: 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;
}