按字母顺序对具有相同值的键进行排序

时间:2014-10-26 09:48:33

标签: php arrays sorting

我有一个已经用arsort排序的数组,因此首先显示具有最高整数的值,最后显示最小的整数

我现在的问题是我需要按字母顺序对键进行排序,但仍然按值保留排序顺序。在使用krsort按值排序之前,我尝试使用arsort按字母顺序对键进行排序,但这仍然给出了相同的输出

这是我的原始数组在应用array_count_values之前的样子

array(5) {
  [0]=>
  string(7) "Romance"
  [1]=>
  string(7) "Romance"
  [2]=>
  string(7) "Classic"
  [3]=>
  string(6) "Comedy"
  [4]=>
  string(6) "Comedy"
}

这就是结果的样子

array(3) {
  ["Romance"]=>
  int(2)
  ["Classic"]=>
  int(1)
  ["Comedy"]=>
  int(2)
}

这是我使用arsort后目前的数组。正如我所说,如果我事先应用krsort,输出是相同的

并不重要
array(3) {
  ["Romance"]=>
  int(2)
  ["Comedy"]=>
  int(2)
  ["Classic"]=>
  int(1)
}

我正在寻找的输出是

array(3) {
  ["Comedy"]=>
  int(2)
  ["Romance"]=>
  int(2)
  ["Classic"]=>
  int(1)
}

关于如何实现这一目标的任何想法?

修改

这是我的完整数组,包含函数

array(3) {
  ["5 star"]=>
  array(4) {
    [0]=>
    string(7) "Romance"
    [1]=>
    string(7) "Romance"
    [2]=>
    string(6) "Comedy"
    [3]=>
    string(6) "Comedy"
  }
  ["4 star"]=>
  array(5) {
    [0]=>
    string(7) "Romance"
    [1]=>
    string(7) "Romance"
    [2]=>
    string(7) "Classic"
    [3]=>
    string(6) "Comedy"
    [4]=>
    string(6) "Comedy"
  }
  ["3 star"]=>
  array(4) {
    [0]=>
    string(7) "Classic"
    [1]=>
    string(7) "Romance"
    [2]=>
    string(7) "Classic"
    [3]=>
    string(6) "Comedy"
  }
}

$term_list是上面的数组

foreach ( $term_list as $key=>$value ) {
    echo $key;
    $counted_values = array_count_values($value);
    arsort($counted_values, SORT_NUMERIC);

    foreach ( $counted_values as $counted_values_keys=>$counted_value ) {
        echo '<li>' . $counted_values_keys . ' (' . $counted_value . ') </li>';
    }
}

1 个答案:

答案 0 :(得分:2)

彼得你可以使用以下代码: -

$array = array("Romance" =>  2,"Classic" =>  1,"Comedy"  =>  2);
array_multisort(array_values($array), SORT_DESC, array_keys($array), SORT_ASC, $array);

这是一个重复的问题PHP array multiple sort - by value then by key?

我提供的代码由Jon Bernhardt回答。