Php 使用另一个值数组对数组进行排序

Php 使用另一个值数组对数组进行排序,php,arrays,sorting,Php,Arrays,Sorting,我有以下数组描述了一年中累积的点数。作为相等点上的平局破坏者,我有另一个我计算的值,我希望对结果进行排序 这是已排序的数组,显示一年中的点: $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

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

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

$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
]
我将如何实现这一点


编辑:它和你的不一样。建议的解决方案基于数组的值,无法解决需要按正确顺序在另一个数组中插入值的问题。

使用结果数组的值和“另一个数组”的值创建二维数组。 此数组使用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);
$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\u replace($results,$anotherArray1,$anotherArray2);
$newArr=[];
foreach($结果为$key=>$value){
$newArr[$key]=[“v”=>$value,'s'=>$sekArr[$key]];
}
uasort($newArr,函数($a,$b){
返回$b['v']$a['v']?:$a['s']$b['s'];
});
$results=[];
foreach($newArr作为$key=>$arr){
$results[$key]=$arr['v'];
}
var_dump($结果);
自己尝试:

可能重复的