Допустим, я хочу отсортировать некоторые элементы и нужно отсортировать их по приоритету от наивысшего к низшему (5,3,2,1).Таким образом, самый высокий приоритет 5 будет храниться в $ items [0] после сортировки.Допустим, этот код уже существует для сортировки:
$items = $items->sort(function(Item $a, Item $b)
{
if ($a->priority == $b->priority)
{
return 0;
}
return ($a->priority < $b->priority) ? 1 : -1;
});
Что-то работает, но я не знаю , почему это работает.
Япри условии возврата 0 сохраняет сравниваемый элемент на своем месте.Что делает return 1?Перемещает ли $ a вверх отсортированный массив ближе к массиву [0]?И возврат -1 перемещает $ a вниз по массиву ближе к массиву [10]?
Или это действительно перемещает переменную $ b?
решено
ОКЯ взломал его с помощью Pauly и phpdev.Фактически он перемещает переменную $ b, а не переменную $ a внутри функции обратного вызова.Поэтому мне нужно было изменить логику, чтобы она имела смысл.-1 перемещает $ b вниз по массиву, 1 перемещает $ b вверх по массиву, а 0 сохраняет $ b в том же месте.
$priorities = array(5, 8, 3, 10, 4, 3, 7);
usort($priorities, function($a, $b)
{
if ($a == $b)
{
// Same priority, keep same
echo "$a is same as $b, keeping the same\n";
return 0;
}
else if ($a > $b)
{
// $a is higher priority, move $b down array
echo "$a greater than $b, moving $b down array\n";
return -1;
}
else {
// $a is lower priority, move $b up array
echo "$b greater than $a, moving $b up array\n";
return 1;
}
});
var_dump($priorities);
Это приводит к:
10 greater than 8, moving 8 down array
10 greater than 7, moving 10 up array
10 greater than 3, moving 10 up array
10 greater than 4, moving 10 up array
10 greater than 5, moving 10 up array
10 greater than 3, moving 10 up array
10 greater than 8, moving 10 up array
5 greater than 3, moving 3 down array
7 greater than 5, moving 5 down array
8 greater than 5, moving 8 up array
5 greater than 4, moving 4 down array
5 greater than 3, moving 5 up array
5 greater than 4, moving 5 up array
8 greater than 7, moving 8 up array
4 greater than 3, moving 4 up array
3 is same as 3, keeping the same
4 greater than 3, moving 3 down array
array(7) {
[0]=> int(10)
[1]=> int(8)
[2]=> int(7)
[3]=> int(5)
[4]=> int(4)
[5]=> int(3)
[6]=> int(3)
}