У меня есть следующие Красноречивые коллекции:коллекции Laravel не сортировочная
[
[
'id' => 60902,
'source' => 'M',
'price' => 10.15
],
[
'id' => 57348,
'source' => 'A',
'price' => 12.00
],
[
'id' => 54472,
'source' => 'A',
'price' => 12.00
],
]
Я пытаюсь сортировать его с этим кодом:
$items = $items->sort(function (Item $a, Item $b) {
if ($a->source == 'A') {
if ($b->source == 'M' || ($b->source == 'A' && $a->price < $b->price)) {
return 1;
} elseif ($b->source == 'A' && $a->price == $b->price) {
return 0;
} else {
return -1;
}
} else {
if ($b->source == 'A' || ($b->source == 'M' && $b->price < $a->price)) {
return -1;
} elseif ($b->source == 'M' && $b->price == $a->price) {
return 0;
} else {
return 1;
}
}
});
Однако первоначальный порядок сортировки $items
всегда такой же до и после. Первый элемент (60902) в списке должен быть перемещен от начала до конца.
Я запустил трассировку Xdebug и могу видеть, что элемент 60902 возвратил -1
в функции сортировки, а два других возвращенных объекта 0
, потому что они эквивалентны друг другу.
Это, как я ожидаю, что коллекция выглядеть после сортировки:
[
[
'id' => 57348,
'source' => 'A',
'price' => 12.00
],
[
'id' => 54472,
'source' => 'A',
'price' => 12.00
],
[
'id' => 60902,
'source' => 'M',
'price' => 10.15
]
]
Где моя логика перепутались здесь?
что вы хотите сделать?. сортировка по цене и сортировка по убыванию? – Vikash
Я делаю сложный сорт по источнику и цене. Источник А предпочтительный над источником М. Если тот же источник, более низкая цена лучше, чем выше. – eComEvo
Я знаю, что это не то, о чем вы просите, но если вы получите результат из базы данных, почему бы не заказать результат на уровне запросов к базе данных? 'ORDER BY source, price' должен это сделать. – lesssugar