2015-06-01 6 views
1

Является ли функция сортировки на Laravel 5 Eloquent коллекции стабильной сортировкой? Стабильный тип не будет изменять порядок элементов с одинаковым ключом сортировки.Является ли Красноречивый вид стабильным в Laravel 5?

То есть, учитывая этот список ввода:

| order | value | 
|-------+-------| 
| 5  | a  | 
| 2  | b  | 
| 5  | c  | 
| 10 | d  | 

Могу ли я рассчитывать на $list->sortBy('order') всегда возвращает следующий результат?

| order | value | 
|-------+-------| 
| 2  | b  | 
| 5  | a  | <-- a and c have not 
| 5  | c  | <-- switched places 
| 10 | d  | 
+0

Вы всегда можете проверить это и найти ответ самостоятельно. –

+3

@MartinBean вы не можете проверить, гарантировано ли оно работать. – Keelan

ответ

3

Исходный код может быть найден в Illuminate/Support/Collection.php:

public function sortBy($callback, $options = SORT_REGULAR, $descending = false) 
{ 
    $results = []; 
    if (! $this->useAsCallable($callback)) 
    { 
     $callback = $this->valueRetriever($callback); 
    } 
    // First we will loop through the items and get the comparator from a callback 
    // function which we were given. Then, we will sort the returned values and 
    // and grab the corresponding values for the sorted keys from this array. 
    foreach ($this->items as $key => $value) 
    { 
     $results[$key] = $callback($value, $key); 
    } 
    $descending ? arsort($results, $options) 
       : asort($results, $options); 
    // Once we have sorted all of the keys in the array, we will loop through them 
    // and grab the corresponding model so we can set the underlying items list 
    // to the sorted version. Then we'll just return the collection instance. 
    foreach (array_keys($results) as $key) 
    { 
     $results[$key] = $this->items[$key]; 
    } 
    $this->items = $results; 
    return $this; 
} 

С sort() family isn't stable, эта функция не будет стабильной либо.

Есть stable PHP sort functions, но если вы хотите их использовать, вам нужно будет установить Laravel.

+0

Хм, слишком плохо. И нет никакого собственного варианта сортировки для стабильного сортировки. –

+0

@ EmilVikström nope - Я нашел стабильные функции сортировки PHP и добавил их, но вам нужно будет исправить Laravel, если вы хотите их использовать. – Keelan

Смежные вопросы