Intereting Posts

Сортировка массива объектов

У меня возникли проблемы с примерами в руководстве по PHP, поэтому я хотел бы спросить об этом здесь …

У меня есть массив объектов. Есть ли способ отсортировать его на основе содержимого объекта?

Например, мой массив:

Array ( [0] => stdClass Object ( [id] => 123 [alias] => mike ) [1] => stdClass Object ( [id] => 456 [alias] => alice ) [2] => stdClass Object ( [id] => 789 [alias] => zeke ) [3] => stdClass Object ( [id] => 987 [alias] => dave ) ) 

Как отсортировать массив с помощью [alias] объектов?

В этом примере вывод должен быть:

 Array ( [0] => stdClass Object ( [id] => 456 [alias] => alice ) [1] => stdClass Object ( [id] => 987 [alias] => dave ) [2] => stdClass Object ( [id] => 123 [alias] => mike ) [3] => stdClass Object ( [id] => 789 [alias] => zeke ) ) 

Заранее спасибо!

Используйте usort() . Вы указываете функцию для этого сравнения, и сортировка выполняется на основе функции. Например:

 function my_comparison($a, $b) { return strcmp($a->alias, $b->alias); } $arr = ...; usort($arr, 'my_comparison'); 

Я думаю, что порядок отсутствует, я нашел эту другую функцию

 <?php /** * Sort array of objects by field. * * @autor Lea Hayes * @param array $objects Array of objects to sort. * @param string $on Name of field. * @param string $order (ASC|DESC) */ function sort_on_field(&$objects, $on, $order = 'ASC') { $comparer = ($order === 'DESC') ? "return -strcmp(\$a->{$on},\$b->{$on});" : "return strcmp(\$a->{$on},\$b->{$on});"; usort($objects, create_function('$a,$b', $comparer)); } $order = ($_GET['order'] === 'asc') ? 'ASC' : 'DESC'; sort_on_field($arr, 'alias', $order);