<?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>
这个程序通过 多次点击以后 排序的数组就会出现错误 为什么?哪位高手帮我解决下
{
$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>
这个程序通过 多次点击以后 排序的数组就会出现错误 为什么?哪位高手帮我解决下
{
$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>
php自带的sort就行了,你自己写的,看着挺晕……
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。
$_SESSION['原数组']
unset掉unset($_SESSION['原数组']);
我想应该是随机数重复时出错。
把
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);
}
。
我试过了没问题。^_^
{
$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]是不存在的,留下一个空
return $ary;
改为
return array_slice($ary, 0);