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

#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 вверху.

Ознакомьтесь с этой документацией для сортировки массивов обратного вызова.

https://www.php.net/manual/en/function.usort.php