У меня есть отсортированный массив (по значению) с числами от 900000
до 000000
, в то время как первая цифра описывает общий номер позиционирования, за которым следуют все остальные цифры.
Значение получает число на основе предыдущих вычислений для формирования оценки фильтра. Чем лучше оценка, тем выше будет рейтинг у предмета с таким счетом.
903402.55
^ ^ ^
| | |_ Describes individual score in sorting -> higher -> better
| |__ describes general score value in sorting -> higher -> better
|__ describes general category that forms sorting roughly
Теперь у меня есть массив, полный таких оценок, отсортированных по результату DESC (от HIGH до LOW).
1010 * Т.е. *
[
'item_id_1' => 903402.55,
'item_id_2' => 903402.55,
'item_id_3' => 903402.52,
'item_id_4' => 903402.51,
'item_id_5' => 903402.40,
'item_id_6' => 903402.39,
'item_id_7' => 903402.37,
'item_id_8' => 903402.37,
'item_id_9' => 903402.21,
'item_id_10' => 903402.10,
'item_id_11' => 903402.08,
'item_id_12' => 903402.01,
]
и так далее.
Теперь я хочу перетасовать каждый 3-й элемент, но поддерживать общий порядок, чтобы четвертый элемент не мог стать вторым элементом всего массива, но в позиции 1-3, соответственно, масштабируемой при обработке всего массива.
Это означает, что мой потенциальный результат будет таким:
[
'item_id_3' => "now better then 1",
'item_id_1' => "now worse then 3 but better then 2",
'item_id_2' => "now worse then 1 but better then 5",
'item_id_5' => "now better then 4, can't change 3-group",
'item_id_4' => "now worse then 5",
'item_id_6' => "now worse then 4",
...
]
Что я сделал, так это сгруппировал весь массив по 3, чтобы я получил массив, содержащий каждые 3 элемента в правильном порядке.
$i = 0;
$shuffleGroup = [];
foreach ($scores as $productId => $score) {
$shuffleGroup[$i][$productId] = $score;
if(count($shuffleGroup[$i]) === 3){
$i++;
}
}
Теперь я хотел бы создать правильную манипуляцию с партитурой, чтобы сохранить общий порядок, но рандомизировать ее на 3 части.
Как бы я это сделал?