@m4f1

Как сортировать объекты (алфавитный порядок) в запросе по значению?

Существует многомерный массив, где нужно сделать сортировку значений по алфавиту.
Массив залил на pastebin, тут не умещается.

shopColorValue object нужно расставить в алфавитном порядке по значению поля shopColorValuevalue => 'цвет'

Смог сократить многомерный массив в обычный:
foreach ( $filters as $filter ) {
            //arsort($filter);
            foreach ( $filter as $key => $value ) {
                wa_dump($filter);
            }
        }


Выводит:
Array
(
  id => '675'
  parent_id => NULL
  code => 'tsvet1'
  status => 'public'
  name => 'Цвет'
  type => 'color'
  selectable => '1'
  multiple => '1'
  count => '25'
  values => Array
  (
    27 => shopColorValue object
    {
      shopColorValuecode => '0'
      shopColorValuevalue => 'чёрный'
      shopColorValueid => '27'
      shopColorValuesort => '1'
      shopColorValue_data => NULL
      feature_id => '675'
    }
    34 => shopColorValue object
    {
      shopColorValuecode => '255'
      shopColorValuevalue => 'синий'
      shopColorValueid => '34'
      shopColorValuesort => '9'
      shopColorValue_data => NULL
      feature_id => '675'
    }
    )
  )


Как теперь сделать сортировку объектов по заданным значениям и вернуть все обратно в переменную
$filters

UPD
Сейчас код выглядит так:
public function sortirovka_filters($filters) {

function cmp_obj($a, $b):bool {
    $al = strtolower($a->shopColorValuevalue);
    $bl = strtolower($b->shopColorValuevalue);
    if ($al == $bl) {
return 0;
    }
    return ($al > $bl) ? +1 : -1;
}

uasort($filters['675']['values'], "cmp_obj");

return $filters;
}


В дампе выдает это https://pastebin.com/XbQyaZ3B
  • Вопрос задан
  • 83 просмотра
Решения вопроса 1
@NinjaNickName
Web разработчик
usort

php — сортировка массива объектов по полям объекта
Сортировка объектов в PHP 7
Сортировка объектов в PHP

Пример для ваших данных:
usort($array['675']['values'], function($a, $b)  {
            return $a->color <=> $b->color;
        });


С сохранением ключей:
uasort

uasort($array['675']['values'], function($a, $b)  {
            return $a->color <=> $b->color;
        });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Zelo Москва
от 130 000 руб.
Amigoweb Магнитогорск
от 40 000 до 70 000 руб.
АКМЭ сервис Санкт-Петербург
от 110 000 руб.