sort multidimensional krsort desc array_multisort array php sorting ksort

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 ).

http://phpave.com/sorting-associative-array-specific-key/


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; }