Php 基于花药数组按顺序排列两个数组

Php 基于花药数组按顺序排列两个数组,php,arrays,Php,Arrays,我有两个php数组,$array1和$array2,我根据$array1对$array2进行排名 $array1 =array(2,10,4,5,2,1); $array2 =array(A,B,C,D,E,F); $ordered_values = $array1; array_multisort($array1, $array2); foreach ($array1 as $key => $value) { foreach ($ordered_valu

我有两个php数组,
$array1
$array2
,我根据
$array1
$array2
进行排名

 $array1 =array(2,10,4,5,2,1);
 $array2 =array(A,B,C,D,E,F);



  $ordered_values = $array1;
  array_multisort($array1, $array2);

  foreach ($array1 as $key => $value) {
     foreach ($ordered_values as $ordered_key => $ordered_value) {
       if ($value === $ordered_value) {
        $key = $ordered_key;
        break;
    }
  }


   echo $value . '- Rank: ' . ((int) $key + 1) . '<br/>';

  }
然而,这正是我所期待的

    B- Rank: 1
    D- Rank: 2
    C- Rank: 3
    E- Rank: 4
    A- Rank: 4
    F- Rank: 6

非常感谢您的帮助。

您可以
数组\u组合两个数组来排列它们,并
按值排序并保留关联键。在循环之前,为列组编号设置一个计数器。还为上一个值添加一个临时保持器,用于检查我们是否希望使排名数字保持不变,以及另一个容器,其中包含已完成的跳过次数:

$array3 = array_combine($array2, $array1); arsort($array3);
$skip = 0; $i = 0; $temp = null;
foreach($array3 as $k => $v) {
    if($temp !== $v) {$i++; $i += $skip; $skip = 0;}else {$skip++;}
    $temp = $v;
    echo $k, ' Rank: ', $i, "\n";

}
上面的
if
条件只是检查上一个值是否不相等。如果没有,只需继续增量。如果相等,则在跳过计数器上添加。然后,一旦迭代在非等号上恢复,这将把跳过计数器合并到当前秩号


您可以
数组\u组合两个数组以将它们对齐,并
按值排序并保留关联键。在循环之前,为列组编号设置一个计数器。还为上一个值添加一个临时保持器,用于检查我们是否希望使排名数字保持不变,以及另一个容器,其中包含已完成的跳过次数:

$array3 = array_combine($array2, $array1); arsort($array3);
$skip = 0; $i = 0; $temp = null;
foreach($array3 as $k => $v) {
    if($temp !== $v) {$i++; $i += $skip; $skip = 0;}else {$skip++;}
    $temp = $v;
    echo $k, ' Rank: ', $i, "\n";

}
上面的
if
条件只是检查上一个值是否不相等。如果没有,只需继续增量。如果相等,则在跳过计数器上添加。然后,一旦迭代在非等号上恢复,这将把跳过计数器合并到当前秩号


@MessiahCoder当然很高兴这个帮助我问了一个问题,在mysql中有类似的数组数据,我想使用find_in_set函数或其他更好的函数从mysql中查找排名,请查看问题是否有帮助@MessiahCoder在要求Ghost检查其他人之前,您应该接受此答案。@MessiahCoder非常高兴此帮助我问了一个在mysql中具有类似数组数据的问题,我想使用find_in_set函数或其他更好的函数从mysql中查找排名,请看这个问题,如果你能帮助@MessiahCoder你应该接受这个答案,然后再让Ghost检查另一个。