$a = Array
(
 1   =>   10.5,
 4   =>   10.5,
 3   =>   9,
 2   =>   9,
 5   =>   9,
);
sort($a);
krsort($a);
list($k,$v) = each($a);
echo "key:$k, value:$v\n";

解决方案 »

  1.   

    何来的挑战性呀。。$a = Array
    (
     1   =>   10.5,
     4   =>   10.5,
     3   =>   9,
     2   =>   9,
     5   =>   9,
    );
    function maxKeyValue($arr)
    {
    $maxValue  = 0;
    $maxKey  = 0 ; 
    foreach($arr as $k=>$v)
    {
    if($v >= $maxValue && $k > $maxKey)
    {
    $maxValue  = $v;
    $maxKey  = $k;
    }
    }
    return array($maxKey => $maxValue);
    }print_r(maxKeyValue($a));
      

  2.   

    对不起,我的代码有bug。
    参照:foolbirdflyfirst的
      

  3.   

    不过2楼的方法我测试了下有个问题
    <?
    $a = Array
    (
     1   =>   10.5,
     2   =>   9,
     3   =>   10.5,
     4   =>   9,
     5   =>   9,
    );
    sort($a);
    krsort($a);
    list($k,$v) = each($a);
    echo "key:$k, value:$v\n";
    ?>key:4, value:10.5 
      

  4.   

    $a = Array
    (
     1   =>   10.5,
     4   =>   10.5,
     10   =>   10.5,
     100   =>   10.5,
     3   =>   9,
     2   =>   9,
     20   =>   9,
     200   =>   9,
     );$mx = max($a);
    foreach($a as $k=>$v) {
      if ($mx === $v) {
        $vmx[] = $k;
      }
    }
    $kmx = max($vmx);
    echo "$kmx, $mx\n";
      

  5.   

    2楼的代码有问题,输出一个最大的还可以,如果我要输出前两个最大的.那问题不就出来了.肯定要用到判断语句.
    4楼的代码很正确,很符合逻辑.在JAVA中,我也是经常这样写.
    10楼的代码用的方法有点过旧."==="在php4中有.在php5中都不用了.我就没有用过.
      

  6.   

    $arr = Array
    (
     1   =>   10.5,
     4   =>   10.5,
     3   =>   9,
     2   =>   9,
     5   =>   9,
    );function Max($arr){
    $temp =1;
    $point =1;
    $temp=$arr[$point ];

    for($i=1;i<=count($arr);$i++){

    if($temp>=$arr[$i]){
    $temp>=$arr[$i];
    $point =$i;
    }

    }
    echo "Max = ".$temp." And "."Point = ".$point;
    }这样应该就可以了!
      

  7.   

    总结一下,
    二楼的错误是取出数组中最大的值及最大的键值;
    四楼的错误是不能取出最大的值而是同时取出最大的值及最大的键值(如2=>11,则将导致错误),而楼主的要求是最大的值之后的最大键值,十三楼的赶快检查你以前写过的JAVA到底有多少错误;
    十楼的方法是正确的,用“===”是为了解决0和NULL的区分问题。
    十五楼的兄弟代码本身就有语法错误、函数名称重复错误、里面的代码看的我头晕,勉强看了一下,大概意思是先出最大的值赋值给$temp,同时将其键值赋给$point,和PHP自带的MAX()函数差不多。同时该兄弟没有分清枚举数组和关联数组的区别。我在十五楼的兄弟代码基础上修改了一下:
    <?php
    //www.hubei8.cn修改了15楼兄弟的代码
    $arr   =   Array 

      1       =>       100.5, 
      4       =>       10.5, 
      3       =>       9, 
      2       =>       9, 
      15       =>       99 ,); function giveMax($arr){ 
      $temp =0; 
      $temp=$arr[$point];   foreach($arr as $key =>$value){ 
        if($temp<$value){ 
    $temp=$value;
    $point=$key;
        }elseif($temp===$value){
    if($point<$key){
    $temp=$value;
    $point=$key;
    }
    }
      }
      return 'Result:$arr'.'['.$point.']='.$temp;
    } echo giveMax($arr);?>
      

  8.   

    附上一句:
    楼主提的问题其实没有多大挑战性,但是,PHPer大多是自学成才,大部分都没有算法基础,才导致此问题出现了难度。建议大家都好好补补算法,我也是。
      

  9.   

    厄...接受批评.$a = Array
    (
     1   =>   10.5,
     4   =>   10.5,
     3   =>   9,
     2   =>   9,
     5   =>   9,
    );
    function maxKeyValue($arr)
    {
        ksort($arr);
        $maxValue     = 0;
        $maxKey     = 0 ; 
        foreach($arr as $k=>$v)
        {
            if($v >= $maxValue && $k > $maxKey)
            {
                $maxValue     = $v;
                $maxKey     = $k;
            }
        }
        return array($maxKey => $maxValue);
    }print_r(maxKeyValue($a));
      

  10.   

    17楼兄弟  呵呵,谢谢提醒,在写的时候还真的是没有注意到枚举数组这个问题。
    $arr   =   Array 

      1       =>       10.5, 
      4       =>       10.5, 
      3       =>       9, 
      2       =>       9, 
      5       =>       9, 
    ); function   Max($arr){ 
      $temp =0; 
      $num =0; 
      foreach($arr as $key => $value){
         if($temp>=$value){        $temp = $value; 
            $num = $key ;
         }  }
    echo   "Max   =   ".$temp."   And   "."Point   =   ".$num ; 
    } 呵呵,这样就可以了。如果还有什么问题请指出互相学习!不过怎么也想不到需要使用两个if,平白无故的给计算机增加负担嘛。至于Max()这个函数,我才开始接触php对他的函数了解不是特别多。在这里要谢谢你的提醒。不过,以后做人要厚道!在评论他人的时候也给自己留点余地!重申,还是十分感谢您的帮助、提醒!