形如$test = array(
'a'=> '8000', 
'b'=> '9000',
'c'=> '9000', 
'd'=> '7000', 
'e'=> '6000', 
'f'=> '5000',
'g'=> '9000'
);如果是取最大值,要求返回b,c,g
如果是取前两位最大值,要求返回b,c,g,a
想了半天,不知道有什么好的方法

解决方案 »

  1.   

    $test = array(
        'a'=> '8000', 
        'b'=> '9000',
        'c'=> '9000', 
        'd'=> '7000', 
        'e'=> '6000', 
        'f'=> '5000',
        'g'=> '9000'
    );
    $a = array_keys($test, max($test));
    print_r($a);
    /*
    Array
    (
        [0] => b
        [1] => c
        [2] => g
    )
    */
    $t = array_diff_key($test, array_flip($a));
    $a = array_merge($a, array_keys($t, max($t)));
    print_r($a);
    /*
    Array
    (
        [0] => b
        [1] => c
        [2] => g
        [3] => a
    )
    */
      

  2.   

    汗,查了下手册才知道array_keys还可以传第二个参数
    我再想想这个如何扩展,多谢老大了
      

  3.   

    可以这样扩展$test = array(
        'a'=> '8000', 
        'b'=> '9000',
        'c'=> '9000', 
        'd'=> '7000', 
        'e'=> '6000', 
        'f'=> '5000',
        'g'=> '9000'
    );print_r(places($test));
    print_r(places($test, 2));
    print_r(places($test, 3));function places($ar, $n=1) {
      $r = array_keys($ar, max($ar));
      while(--$n) {
        $t = array_diff_key($ar, array_flip($r));
        $r = array_merge($r, array_keys($t, max($t)));
      };
      return $r;
    }
    Array
    (
        [0] => b
        [1] => c
        [2] => g
    )
    Array
    (
        [0] => b
        [1] => c
        [2] => g
        [3] => a
    )
    Array
    (
        [0] => b
        [1] => c
        [2] => g
        [3] => a
        [4] => d
    )
    方法很多,不要在一棵树上吊死