#php #arrays
Вопрос:
У меня есть объект, и я храню его в массиве. Однако при выводе имен из объекта я хочу отсортировать их по «is_main». Таким образом, «is_main» со значением 1 всегда должен быть на первом месте, а затем «is_main» со значением 0. Вот этот объект
array(2){
[
1
]=> object(stdClass)#3729 (22){
[
"id_teacher"
]=> string(1)"2"[
"firstname"
]=> string(6)"John"[
"lastname"
]=> string(8)"Doe"[
"is_main"
]=> string(1)"0"
}[
2
]=> object(stdClass)#3723 (22){
[
"id_teacher"
]=> string(1)"2"[
"firstname"
]=> string(6)"John"[
"lastname"
]=> string(8)"Brown"[
"is_main"
]=> string(1)"1"
}
}
И мой PHP-код:
$storage = array();
foreach($data->class_teacher_arr[$item->id_class] as $reference) {
$storage[] = $reference->firstname . ' ' . $reference->lastname . ' ' . $reference->is_main;
}
echo implode('<br/>', $storage);
Я надеюсь, что кто-нибудь сможет помочь мне с этой проблемой.
Комментарии:
1. Используйте
usort()
функцию для сортировки по свойству.
Ответ №1:
Вы можете использовать usort с обратным вызовом, определяющим, что вы ищете в функции сортировки.
$teachers = $data->class_teacher_arr[$item->id_class];
usort($teachers, function ($teacher) {
return isset($teacher->is_main) amp;amp; !$teacher->is_main;
});
$storage = array();
foreach($teachers as $reference) {
$storage[] = $reference->firstname . ' ' . $reference->lastname . ' ' . $reference->is_main;
}
echo implode('<br/>', $storage);
Если значение is_main установлено и имеет значение true(равно 1), оно перейдет в верхнюю часть массива, и как только вы отзовете свою переменную хранилища, вы увидите все учителя is_main вверху.
Ознакомьтесь с этой документацией для сортировки массивов обратного вызова.