Задать вопрос
@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
  • Вопрос задан
  • 700 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 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;
        });
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы