<?php function compositer() 

$num = 10; 
$start = 0; 
$end = 100; 
$ul_array = 0; while($ul_array <$num) 

$a[]=rand($start,$end); 
$ary=array_unique($a); 
$ul_array=count($ary); 
} foreach ($ary as $value) 

echo $value.","; 

return $ary; 
} function BubbleSort($arr) 

    $num = count($arr); 

    for($i=0;$i < $num;$i++) 

        for($j=0;$j < $num;$j++) 

            if($arr[$i] < $arr[$j]) 

                $iTemp = $arr[$i]; 
                $arr[$i] = $arr[$j]; 
                $arr[$j] = $iTemp; 
            } 
        } 
    }

    return $arr; 
}if(isset($_POST['sub'])){
    session_start();
    if($_POST['sub']=='原数组') 
        $_SESSION['原数组']=compositer(); 
    if($_POST['sub']=='排序'){
        $My_array = BubbleSort($_SESSION['原数组']);
        echo "原数组:<br>";
        print_r($_SESSION['原数组']);
        echo '<br>';
        echo "排序数组:<br>";
        print_r($My_array); 
    }
}?>
<html> 
<head> 
<title>数组显示 </title> 
</head> 
<body> 
<form action="MyPhp.php"  method = "post"> 
<input type = "submit" value = "原数组" name ="sub"/> 
<input type = "submit" value = "排序" name = "sub" /> 
</form>
</body> 
</html> 
这个程序通过 多次点击以后 排序的数组就会出现错误 为什么?哪位高手帮我解决下

解决方案 »

  1.   

    <?phpfunction compositer()
    {
    $num = 10;
    $start = 0;
    $end = 100;
    $ul_array = 0;while($ul_array <$num)
    {
    $a[]=rand($start,$end);
    $ary=array_unique($a);
    $ul_array=count($ary);
    }foreach ($ary as $value)
    {
    echo $value.",";
    }
    return $ary;
    }if(isset($_POST['sub'])){
        session_start();
        if($_POST['sub']=='原数组')
            $_SESSION['old']=compositer();
        if($_POST['sub']=='排序'){
            echo "原数组: <br>";
            print_r($_SESSION['old']);
            echo ' <br>';
            echo "排序数组: <br>";
            sort($_SESSION['old']);
            print_r($_SESSION['old']);
        }
    }?>
    <html>
    <head>
    <title>数组显示 </title>
    </head>
    <body>
    <form action=""  method = "post">
    <input type = "submit" value = "原数组" name ="sub"/>
    <input type = "submit" value = "排序" name = "sub" />
    </form>
    </body>
    </html>
      

  2.   

    你把你的排序函数直接换成
    php自带的sort就行了,你自己写的,看着挺晕……
      

  3.   

    这是用4楼代码运行的结果:原数组: 
    Array ( [0] => 45 [1] => 60 [2] => 97 [3] => 52 [5] => 2 [6] => 68 [7] => 4 [8] => 1 [9] => 33 [10] => 82 ) 
    排序数组: 
    Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 33 [4] => 45 [5] => 52 [6] => 60 [7] => 68 [8] => 82 [9] => 97 ) 
    其中原数组的key已经出错。但是sort()排序重新改写key,所以不会出错。
    其实,出错的地方应该在compositer()里面。感觉如果点击太快的话,原来的数组还没生成完成,就又开始
    生成新的数组,所以key会超过9。
      

  4.   

    重新生成之前,先把
    $_SESSION['原数组']
    unset掉unset($_SESSION['原数组']);
      

  5.   

    我试过楼上的方法。还是有问题。
    我想应该是随机数重复时出错。

    while($ul_array <$num)
    {
    $a[]=rand($start,$end);
    $ary=array_unique($a);
    $ul_array=count($ary);

    改成
       while($ul_array <$num){
          $a[$ul_array]=rand($start,$end);
          $ary=array_unique($a);
          $ul_array=count($ary);
       }

    我试过了没问题。^_^
      

  6.   

    function compositer()
    {
    $num = 5;
    $start = 0;
    $end = 100;
    $ul_array = 0;while($ul_array <$num)
    {
    $a[]=rand($start,$end);
    $ary=array_unique($a);
    $ul_array=count($ary);
    }
    $being=0;
    foreach ($ary as $value)
    {
    echo $value.",";
    $ary[$being] = $value;
    $being++;
    }
    return $ary;
    }楼主的排序算法并没有错,是因为你在生成数组的时候用array_unique,这个函数只是去除重复的值,但是索引还保留了
    所以在你比较的时候,有的$arr[$i] 或 $arr[$j]是不存在的,留下一个空
      

  7.   

    compositer() 中 
    return $ary; 
    改为
    return array_slice($ary, 0);