Сортировка многомерного массива по определенному ключу

У меня есть массив:

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\";} ) ) 

… что я хочу сортировать по ключу display_name . В настоящее время я печатаю его так:

 foreach ($blogusers as $bloguser) { ... } 

Как мне это сделать?

Вы должны использовать usort () – http://php.net/usort

Мое предложение было бы:

  function cmp($a, $b) { return strcmp($a->display_name, $b->display_name); } usort($blogusers, "cmp"); foreach ($blogusers as $bloguser) { ... 

Просмотреть назначение: 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; } 

Я нашел ответ на 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; } 

А теперь вызовите эту функцию с помощью определенного ключа массива.

 $newArray = sortBy('display_name', $blogusers); 

И если сортировка в asc / desc просто добавляет один аргумент,

 sortBy('display_name', $blogusers, 'desc'); 

Ваш массив выглядит как результат запроса к базе данных. Если это так, пусть база данных выполняет сортировку: просто добавьте ORDER BY display_name в запрос.

Взгляните на следующую статью. Он описывает, как использовать usort() а также описывает, как использовать create_function() чтобы вы могли использовать одну функцию для сортировки по разным полям (с требуемым направлением asc или desc ).

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