Php 根据值对关联数组的键进行排序(函数中的错误)
我想根据关联数组的Php 根据值对关联数组的键进行排序(函数中的错误),php,associative-array,Php,Associative Array,我想根据关联数组的键的值对其进行排序。(从上到下为1、2、3……)。具有相同值的键将具有相同的等级 这里的函数getRanks()用于返回一个数组,该数组包含键和列(数字) 我希望它会像这样返回(这是按降序排序的值) 这是一件简单的事情,您可以使用下面给出的php数组函数检查示例来完成 <?php $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); as
键的值对其进行排序。(从上到下为1、2、3……)。具有相同值的键将具有相同的等级
这里的函数getRanks()
用于返回一个数组,该数组包含键
和列
(数字)
我希望它会像这样返回(这是按降序排序的值)
这是一件简单的事情,您可以使用下面给出的php数组函数检查示例来完成
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
您的方法似乎过于复杂。在我的版本中,我保留了与json相关的复制部分,但以一种更简单的方式完成了它:
function getRanks($json) {
$tmp_arr = json_decode($json, TRUE);
asort($tmp_arr);. // sort ascending
$i=0; $lv=null;$ranks = array();
foreach ($tmp_arr as $k=>$v) {
if ($v>$lv){ $i++; $lv=$v;}
$ranks[$k]=$i;
}
return $ranks;
}
请参见此处的演示:
在稍加修改的版本中,您还可以按降序排列,请参见此处:我还尝试了另一种方法。
我认为这可能不是一个好的解决方案,因为内存和CPU时间消耗很高
对于小型阵列(在我的例子中),它可以正常工作
(我之所以发布,是因为这可能是一个答案)
它创建唯一值的数组,并相应地获取等级
@AnuragSrivastava的可能重复项我已按值排序。我需要根据$ranks
数组中的这些排序值填充列。建议的副本不是我的问题。这不是我要求的。我已经对数组进行了排序。您可以发布您需要的初始数组和结果数组吗?我已经提供了预期结果。你的答案对数组进行排序,这不是我需要的。
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
function getRanks($json) {
$tmp_arr = json_decode($json, TRUE);
asort($tmp_arr);. // sort ascending
$i=0; $lv=null;$ranks = array();
foreach ($tmp_arr as $k=>$v) {
if ($v>$lv){ $i++; $lv=$v;}
$ranks[$k]=$i;
}
return $ranks;
}
$test = array('a'=> 50, 'b'=>60, 'c'=>20, 'd'=>20, 'e'=>10);
$json = json_encode($test);
print_r(getRanks($json));
function getRanks($json) {
$tmp_arr = json_decode($json, TRUE);
arsort($tmp_arr);
$uniq_vals = array_values(array_unique($tmp_arr)); // unique values indexed numerically from 0
foreach ($tmp_arr as $k => $v) {
$tmp_arr[$k] = array_search($v, $uniq_vals) + 1; //as rank will start with 1
}
return $tmp_arr;
}