0

我有以下数组描述了一年中累积的点数。作为平等点的决胜局,我计算了另一个值,我希望对结果进行排序。

这是排序后的数组,显示一年中的点数:

$results = [
  1 => 220
  0 => 209
  4 => 127
  14 => 89
  3 => 84
  7 => 78
  2 => 71
  13 => 61
  16 => 56
  8 => 48
  12 => 45
  10 => 42
  11 => 42
  6 => 39
  5 => 35
  9 => 32
  15 => 22
  17 => 22
  18 => 22
  19 => 1

因为索引 10 和 11,以及 15、17 和 18 相等,所以它们需要按以下数组中的最小值排序:

// For 10 and 11
$anotherArray = [
  11 => 101
  10 => 119
]

// For 15, 17 and 18
$anotherArray = [
  17 => 150
  18 => 160
  15 => 179
]

所以结果数组应该是这样的:

$finalArray = [
  1 => 220
  0 => 209
  4 => 127
  14 => 89
  3 => 84
  7 => 78
  2 => 71
  13 => 61
  16 => 56
  8 => 48
  12 => 45
  11 => 42
  10 => 42
  6 => 39
  5 => 35
  9 => 32
  17 => 22
  18 => 22
  15 => 22
  19 => 1
]

我将如何实现这一目标?

编辑:这与这个问题不同。建议的解决方案是基于数组的值,并不能解决我需要以正确的顺序在另一个数组中插入值的问题。

4

1 回答 1

0

使用结果数组的值和“anotherArrays”的值创建一个二维数组。这个数组用uasort()排序,再转换回一维数组。

$results = [
  1 => 220,0 => 209,4 => 127, 14 => 89, 3 => 84, 7 => 78,
  2 => 71, 13 => 61, 16 => 56, 8 => 48, 12 => 45, 10 => 42, 11 => 42,
  6 => 39, 5 => 35, 9 => 32, 15 => 22, 17 => 22, 18 => 22, 19 => 1
];

$anotherArray1 = [11 => 101, 10 => 119];
$anotherArray2 = [17 => 150, 18 => 160, 15 => 179];

$sekArr = array_replace($results,$anotherArray1,$anotherArray2);

$newArr = [];
foreach($results as $key => $value){
  $newArr[$key] = ["v" => $value, 's' => $sekArr[$key]];
}

uasort($newArr, function($a,$b){
  return $b['v'] <=> $a['v'] ?: $a['s'] <=> $b['s'];
});

$results = [];
foreach($newArr as $key => $arr){
  $results[$key] = $arr['v'];
}

var_dump($results);

亲自尝试:https ://3v4l.org/Si6ST

于 2019-11-15T18:03:18.993 回答