Сортировка массива объектов по полю объекта.
19 Ноя 2009
Задача: Отсортировать массив подобной структуры по текстовому полю tagname (в алфавитном порядке):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[0] => stdClass Object ( [tag_id] => 39 [tagname] => USA [tagmass] => 1 [count] => 1431 ) [1] => stdClass Object ( [tag_id] => 151 [tagname] => MySpace Codes [tagmass] => 1 [count] => 319 ) … |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 |
function mySort($f1,$f2) { if($f1->tagname < $f2->tagname) return -1; elseif($f1->tagname > $f2->tagname) return 1; else return 0; } // uasort – сортирует массив, используя пользовательскую функцию mySort uasort($arr,"mySort"); print_r($arr); |
Витягуємо ключі, сортуємо по ключах за допомогою мультисортування масивів. Так можна сортувати за любим параметром.
Вы просто молодец, очень помог ваш скрипт. Использовал его для сортировки таксономии в WordPress.
Всё работает, но сортирует в обратном порядке.
Да, действительно, в третьем примере вижу функцию cmp_obj, которая по логике идентична с функцией mySort в моей заметке.
Заодно и будущим читателям помогли ссылкой на более подробный пример. За что и выражаю благодарность. Спасибо за участие.
Я думаю, Вы уже отлично разобрались в этом вопросе.
опечатался так прально
Обратите внимание, что в примере по Вашей ссылке – массивы, а в моём – массив объектов. В том-то и соль – отсортировать именно массив объектов по какому-либо полю, а не просто массив. Может Вы в исходных данных запутались? Ну, раз в том случае работает, то наверное так и есть: на вход подаете обычный массив.
Код рабочий. Разберитесь, почему у Вас не работает.
как бы этот вариант не пашет