1. 要求写一段程序,实现把以下数组$arr1转换成数组$arr2的功能:
$arr1=array(
'0'=>array('fid'=>1,'tid'=>1,'name'=>'Name1'),
'1'=>array('fid'=>1,'tid'=>2,'name'=>'Name2'),
'2'=>array('fid'=>1,'tid'=>5,'name'=>'Name3'),
'3'=>array('fid'=>1,'tid'=>7,'name'=>'Name4'),
'4'=>array('fid'=>3,'tid'=>9,'name'=>'Name5')
);
$arr2=array(
'0'=>array(
'0'=>array('tid'=>1,'name'=>'Name1'),
'1'=>array('tid'=>2,'name'=>'Name2'),
'2'=>array('tid'=>5,'name'=>'Name3'),
'3'=>array('tid'=>7,'name'=>'Name4')
),
'1'=>array(
'0'=>array('tid'=>9,'name'=>'Name5')
)
);
$arr1转换成$arr2的根据是数组把$arr1里面的fid=1的“放”一个数组里,fid=3的“放”在另一个数组,可以根据fid的值对数组进行分组,然后通过array_values()函数返回排序后的数组值即可。
实现代码如下:
$arr1=array(
'0'=>array('fid'=>1,'tid'=>1,'name'=>'Name1'),
'1'=>array('fid'=>1,'tid'=>2,'name'=>'Name2'),
'2'=>array('fid'=>1,'tid'=>5,'name'=>'Name3'),
'3'=>array('fid'=>1,'tid'=>7,'name'=>'Name4'),
'4'=>array('fid'=>3,'tid'=>9,'name'=>'Name5')
);
foreach($arr1 as $key=>$value){
$result[$value['fid']][]=$value;
}
$arr2=array_values($result);
print_r($arr2);
程序的运行结果为Array([0]=>Array([0]=>Array([fid]=>1[tid]=>1[name]=>Name1)[1]=>Array([fid]=>1[tid]=>2[name]=>Name2)[2]=>Array([fid]=>1[tid]=>5[name]=>Name3)[3]=>Array([fid]=>1[tid]=>7[name]=>Name4))[1]=>Array([0]=>Array([fid]=>3[tid]=>9[name]=>Name5)))。
2. 写代码创建二维数组存储10位同学的学号和本课程的成绩,10组数据:(“20170101”,95)(“20170102”,88)(“20170103”,47)(“20170104”,92)(“20170105”,90)(“20170106”,75)(“20170107”,85)(“20170108”,65)(“20170109”,98)(“20170110”,55)。
1)求出成绩最高者显示在网页上。
2)求出不及格的学生信息显示在网页上。
根据题意创建一个二维数组的实现代码如下:
<?php
$score=array(95,88,47,92;90,75,85;65,98,55);
for($i=1;$i<=10;$i++){
$arr["2017010".$i][]=$score[$i-1];
}
?>
1)可以使用array_search()函数和max()函数求出最高者,实现代码如下:
echo array_search(max($arr),arr);
程序的运行结果为20170109。
2)求出不合格学生的信息,可以对数组进行遍历判断二维数组的值是否小于60。
实现代码如下:
<?php
foreach($arr as $key=>$val){
if($arr[$key][0]<60){
echo $key."分数为:".$arr[$key][0]."";
}
}
?>
程序的运行结果为20170103分数为:47 201701010分数为:55。
4. 给定一个由n-1个整数组成的未排序的数组序列,其元素都是1~n中的不同的整数。请写出一个寻找数组序列中缺失整数的线性时间算法。
首先分析一下数学性质。假设缺失的数字是X,那么这n-1个数一定是1~n之间除了X以外的所有数,试想一下,1~n一共n个数的和是可以求出来的,数组中的元素的和也是可以求出来的,二者相减,其值是否就是缺失的数字X的值呢?
为了更好地说明上述方法,举一个简单的例子加以说明。假设数组序列为{2,1,4,5),一共4个元素,n的值为5,要想找出这个缺失的数字,可以首先对1~5五个数字求和,求和结果为15(1+2+3+4+5=15),而数组元素的和为array[0]+array[1]+array[2]+amy[3]=2+1+4+5=12,所以,缺失的数字为15-12=3。
通过上面的例子可以很容易形成以下具体思路:定义两个数suma与sumb,其中,suma表示的是这n-1个数的和,sumb表示的是这n个数的和,很显然,缺失的数字的值即为sumb-suma的值。
示例代码如下:
<?php
function getnum($arr;$len)
{
if(!$arr||$len<=0)
{
printf("参数不合理");
return-1;
}
$suma=0;
$sumb=0;
for($i=0;$i<$len;$i++)
{
$suma=$suma+$arr[$i];
$sumb=$sumb+$i;
}
$sumb=$sumb+$len+$len+1;
return $sumb-$suma;
}
$arr=array(1,4,3,2,7,5);
$len=count($arr);
printf("%d",getnum($arr,$len));
?>
程序的运行结果为
6