Как пересчитать вес сортировки?
Идея такая: Есть набор данных в отсортированном варианте:
id|weght
2 | 110
1 | 100
3 | 100
Теперь я хочу, чтобы 3 был выше 2, но при это добавляя к 3 не 20, а 10.
То-есть мне нужно пересчитать все значения, чтобы на выходе получить:
id|weght
3 | 110
2 | 100
1 | 100
Как написать такую универсальную функцию?)
Ответы (1 шт):
Автор решения: Meow
→ Ссылка
На скорую руку накатал решение, надеюсь правильно Вас понял.
$array = [
[
'id' => 1,
'weight' => 100
],
[
'id' => 2,
'weight' => 110
],
[
'id' => 3,
'weight' => 100
]
];
$array2 = [
'id' => 3, // К какому элементу прибавляем вес
'addedWeight' => 10 // На сколько прибавляем
];
$key = array_search($array2['id'], array_column($array, 'id'));
$array[$key]['weight'] += $array2['addedWeight'];
foreach ($array as $key2 => ['id' => $id, 'weight' => $weight]) {
if ($key2 !== $key && $weight === $array[$key]['weight']) {
$array[$key2]['weight'] -= $array2['addedWeight'];
}
}
usort($array, fn($a, $b): int => $b['weight'] <=> $a['weight']);
Визуализируем
echo 'id|weight' . PHP_EOL;
foreach ($array as ['id' => $id, 'weight' => $weight]) {
echo $id . '|' . $weight . PHP_EOL;
}
Результат
