Php 将值数组映射到每个值的数组';s在数组中的秩

Php 将值数组映射到每个值的数组';s在数组中的秩,php,arrays,sorting,Php,Arrays,Sorting,我有这样一个数组: $row_arr_1=array(7,9,5,10); $row_arr_2=array(3,2,4,1); 现在我想得到如下结果数组: $row_arr_1=array(7,9,5,10); $row_arr_2=array(3,2,4,1); 说明: 由于10是行\u arr\u 1中的最大值,因此它将替换为值1 类似地,由于9是行arr\u 1的第二高值,因此它将被2替换,依此类推 我试图对行arr\u 1的值进行排序,但位置已更改 怎么 我可以得到我想要的结果

我有这样一个数组:

$row_arr_1=array(7,9,5,10);
$row_arr_2=array(3,2,4,1);
现在我想得到如下结果数组:

$row_arr_1=array(7,9,5,10);
$row_arr_2=array(3,2,4,1);
说明:

由于
10
行\u arr\u 1
中的最大值,因此它将替换为值1

类似地,由于
9
行arr\u 1
的第二高值,因此它将被2替换,依此类推

我试图对
行arr\u 1的值进行排序,但位置已更改

怎么 我可以得到我想要的结果吗?

您可以在保留键的同时对数组进行排序,并通过以下方式对数组使用这些键:

您必须复制原始数组,因为arsort将对它所指向的实际数组进行排序,而不是返回一个新数组。

可以使用和完成此操作


为了获得最佳效率,尽量减少函数调用总量;这尤其意味着最小化/消除迭代函数调用

这是我对阿桑回答的更有效的版本

代码:()

输出:

array (
  0 => 3,
  1 => 2,
  2 => 4,
  3 => 1,
)

向代码显示您到目前为止尝试过的内容?因此,实际问题是“我想将一个值数组映射到数组中每个值的秩的数组”。在您的情况下,使用
arsort()
将解决此问题。@Phil,没错。我的问题是针对php…而不是针对jquery。它错了吗,因为它被关闭了1?例如
数组([0]=>3[1]=>1[2]=>0[3]=>2)
而不是
数组([0]=>4[1]=>2[2]=>1[3]=>3)
?我注意到了这一点,可以用
array\u walk
进行修复。但它仍然是正确的数组,因为新数组是源数组的排序。您必须再次对键进行排序以获得所需的输出(仍然为1,但如果需要,仍然可以使用array_walk进行修复)。答案已更新。请勿在StackOverflow上仅发布代码答案。无法解释的答案对StackOverflow的价值很低,因为它们对OP和数千名未来研究人员的教育作用甚微。如果你打算花时间支持这个社区,一定要发布完整的答案。
$copy = $arr = [7, 9, 5, 10];
rsort($arr);                      // generates: [10, 9, 7, 5]
$flipped = array_flip($arr);      // generates: [10 => 0, 9 => 1, 7 => 2, 5 => 3]
foreach($copy as $v) {
    $result[] = ++$flipped[$v];   // adds one to each accessed value from $flipped
}
var_export($result);
array (
  0 => 3,
  1 => 2,
  2 => 4,
  3 => 1,
)