2015-06-08 3 views
2

Я хотел бы отсортировать массив объектов по свойству конкретного объекта. Это мой массив с объектами:Сортировка массива с объектами по свойству объектов

enter image description here

Как вы можете видеть, у меня есть массив $all_studies с 2 объектов. Как я могу теперь отсортировать по свойству graduationYear объектов? Поэтому я хотел бы иметь массив с объектами и порядок с объектом 2010 сначала, затем 2014, ... (в этом случае порядок уже правильный, но это не всегда будет одинаковым ..).

Это то, что я пытался, но без Succes:

$all_studies = usort($all_studies, "sort_objects_by_graduationyear"); 

function sort_objects_by_graduationyear($a, $b) { 
    if((int)$a->graduationYear == (int)$b->graduationYear){ return 0 ; } 
    return ($a->graduationYear < $b->graduationYear) ? -1 : 1; 
} 

Но я просто получить true обратно. Я никогда не использовал функцию usort, поэтому я не знаю, как с ней работать. Кто-нибудь может мне помочь?

+0

см [ссылка] (http://stackoverflow.com/questions/4282413/sort-array-of-objects-by-object-fields) –

+0

'usort' сортирует на месте, не * возврат * результат. См. Примеры в [руководстве] (http://php.net/usort). – deceze

+0

Что делать, если я хочу чан-г-р заказ, от большего до лиза, что я могу изменить в ур-функции, чтобы заставить его работать, натан? –

ответ

3

Функция usort возвращает «истину» на успех. Итак, хорошие новости :).

Если вы хотите проверить, выполняется ли сортировка, вам нужно только проверить объект $ all_studies после usort.

$status = usort($all_studies, "sort_objects_by_graduationyear"); 
print_r($all_studies); 
2

Вы были присвоения значения usort к $all_studies which'll быть true и false, таким образом, вы не получали значения, как хотелось бы. На самом деле вам нужно просто sort массив и print, что ценности и его все сделано

Try, как

usort($all_studies, "sort_objects_by_graduationyear"); 

function sort_objects_by_graduationyear($a, $b) { 
    if((int)$a->graduationYear == (int)$b->graduationYear){ return 0 ; } 
    return ($a->graduationYear < $b->graduationYear) ? -1 : 1; 
} 

print_r($all_studies); 

Возвращаемые значения ¶

Возвращает значение TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Check Docs

Смежные вопросы