数组
提出一个问题:
一个养鸡场有6只鸡,他们的体重分别为3kg,5kg,1k个,3.4kg,2kg,6.kg
请问这六只鸡的总体重是多少 平均体重是多少 请你用现在掌握的技术编一个程序
现在我们使用现有的技术来解决问题
$hen1=3;
$hen2=5;
$hen3=1;
$hen4=3.4;
$hen5=2;
$hen6=50;
如果我们的变量很多,如果我们分别取变量名,显示程序无法控制
怎么办
我们可以使用一个新的数据类型array数组,来统一管理这一组数
什么是数组
可以用于存放多个数据的数据类型
快速入门:来解决上述问题
<?php
$hens[0]=3;
$hens[1]=5;
$hens[2]=1;
$hens[3]=3.4;
$hens[4]=2;
$hens[5]=50;
$hens[6]=10;
$allWeight=0;
for($i=0;$i<count($hens);$i++){
echo "第".$i."只鸡体重".$hens[$i]."<br/>";
$allWeight+=$hens[$i];
}
echo "共有".count($hens)."只鸡";
echo "<br/>";
echo "总体重是=".$allWeight."平均体重=".$allWeight/count($hens);
?>
数组创建
在php中,数组就是关键字和值的组合,我们可以这样创建
1,创建数组
$arr[0]=121;
$arr[1]=44;
$arr[2]=43;
几个概念:
[0] - >这个称为下标,或者关键字
$arr[0] - >这个称为数组的一个元素
$arr[0]=121; 121表示$arr[0]元素对应的值
$arr- >这个是该数组的名称
在php数组中,元素存放的值可以是任意数据类型
<?php
$arr[0]="123";
$arr[1]="hello";
$arr[2]="45.2";
$arr[3]=true;
$arr[4]=null;//即使放入了一个null,也要占用一个空间
//遍历一下
for($i=0;$i<count($arr);$i++){
echo '<br/>'.$arr[$i];
}
echo "数组大小".count($arr);
?>
2,创建数组的
第二种方法
基本语法
$数组名 = array(值,.....);
举例说明:
<?php
$arr = array (23, "hello", 234.1 );
//遍历一下
for($i = 0; $i < count ( $arr ); $i ++) {
echo '<br/>' . $arr [$i];
}
echo "<br/>数组大小" . count ( $arr );
?>
3,第三种方式
(默认情况下,我们的元素下标是从0开始给你编号,但是,我们可以自己指定)
基本语法:
$arr['logo']="北京";
$arr['hsp']=123;
...
或者
$arr=array("logo"=>"北京","hsp"=>123,4=>234);
案例演示
<?php
$arr ['logo'] = "北京";
$arr ['hsp'] = "123";
/* for($i=0;$i<count($arr);$i++){
echo '<br/>'.$arr[$i]; 这样遍历不行 */
//这个foreach使用范围更广。
foreach ( $arr as $key => $val ) {
echo $key . "=" . $val . '<br/>';
}
?>
图解理解:
☞ 特别说明:
1,如果我们创建一个数组时,没有给某个元素指定下标,php就会自动的用目前的最大的那个下标值(整数),加上1作为该元素的下标
<?php
$arr=array(5=>"logo",78,123.1);
//我要访问"logo"这个值
echo $arr[5].'<br/>';
echo $arr[7];
?>
2,如果我们给某个元素的下标一样,则会覆盖原来的值
<?php
$arr=array(5=>"logo",78,123.1);
//我要访问"logo"这个值
$arr[5]="yes";
echo $arr[5].'<br/>';
echo $arr[7];
?>
3,如果我们使用true ,false,null作为key,则应当怎样访问
<?php
$arr[true]="hello";
$arr[false]="world";
$arr[null]="no!!";
echo $arr[1].'<br/>';
echo $arr[0].'<br/>';
echo $arr[null];
echo '<br/>'.$arr[""];
$arr[123.3]="yuhua";
echo $arr[123].'<br/>';
?>
4,print_r与var_dump的用法。
<?php
$arr[true]="hello";
$arr[false]="world";
$arr[null]="yes";
//我们通常可以使用print_r来显示整个数组的情况
//即:Array ( [1] => hello [0] => world [] => yes )
print_r($arr);
echo "<br/><br/>";
//var_dump可以更加详细的显示数组的信息
//即:array(3) { [1]=> string(5) "hello" [0]=> string(5) "world" [""]=> string(3) "yes" }
var_dump($arr);
?>
5,访问数组时,不要越界
一维数组的引用
基本语法:
$数组名[键值];
如果你写的键值不存在,则会报告
Notice: Undefined offset
<?php
//php数组可以动态的增长
$arr=array(2,3);
$arr[4]=56;
//这里说明php数组可以动态的增长。
echo $arr[4];
?>
php数组相关的函数说明
1,count函数
基本语法:
count($数组名),可以统计该数组共有过少个元素
2,is_array
3,print_r和var_dump
4, explode — 使用一个字符串分割另一个字符串
此函数返回由字符串组成的数组
案例
<?php
// 示例 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0].'<br/>'; // piece1
echo $pieces[1]; // piece2
?>
php数组遍历的四个方法
☞ 如果使用for while do..while要确定该数组的下标是从0开始顺序排放的
<?php
$color = array ('red', 'blue', 'black' );
//for
for($i = 0; $i < count ( $color ); $i ++) {
echo '<br/>' . $color [$i];
}
echo "<br/>**********";
//while
$i = 0; //循环控制变量
while ( $i < count ( $color ) ) {
echo '<br/>' . $color [$i];
$i ++;
}
//do.. while
echo "<br/>**********";
$i = 0;
do {
echo '<br/>' . $color [$i];
$i ++;
} while ( $i < count ( $color ) );
//foreach
echo "<br/>*********";
foreach ( $color as $k => $v ) {
echo "<br/>$k=$v";
//echo '<br/>$k=$v'; //双引号与单引号的区别。
}
?>
unset 使用unset函数可以销毁某个元素,也可以销毁某个变量
<?php
$arr[0]=112;
$arr[1]=23;
$arr[2]="hello";
echo "<br/>删除前********<br/>";
echo $arr[1];
unset($arr[1]);
echo "<br/>删除后********";
echo $arr[1];
print_r($arr);
?>
数组运算符
<?php
$a=array("a"=>"apple","b"=>"banana");
$b=array("a"=>"pear","b"=>"tea","c"=>"cherry");
$c=$a+$b;
//echo '$a+$b result<br/>';
var_dump($c);
echo"<br/>";
$c=$b+$a;
//echo '$b+$a result<br/>';
var_dump($c);
?>
结果:
array(3) { ["a"]=> string(5) "apple" ["b"]=> string(6) "banana" ["c"]=> string(6) "cherry" }
array(3) { ["a"]=> string(4) "pear" ["b"]=> string(3) "tea" ["c"]=> string(6) "cherry" }
数组的案例:
array11.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gbk2312"/>
</head>
<body>
<h1>请输入学生的成绩,用空格隔开</h1>
<form action="result.php" method="post">
<input type="text" name="grade"/>
<input type="submit" value="开始统计"/>
</form>
</body>
</html>
result.php
<?php
//接受用户提交的学生成绩
$grades=$_REQUEST['grade'];
//echo 'grade='.$grades;
//拆分,对成绩进行分割
$grades=explode(" ",$grades);
$allGrades=0;
//遍历
foreach($grades as $k=>$v){
echo "<br/>$k=$v";
$allGrades+=$v;//隐藏转换 string->float
}
//round函数
echo "<br/>平均成绩是=".round($allGrades/count($grades),2);
?>
结果:
0=22
1=22
2=2
平均成绩是=15.33
深入一点:
1如何将上面2个页面整合为一个页面
2还要求平均成绩保留到小数点后两位
3如何实现下面的功能
(百度里,关键字提交,不会给你删掉,就是这个原理)
array12.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=gbk2312" />
</head>
<body>
<h1>请输入学生的成绩,用空格隔开</h1>
<?php
error_reporting ( E_ALL ^ E_NOTICE ); // 关闭notice提示
//接受用户提交的学生成绩
$grades1 = $_REQUEST ['grade'];
//echo 'grade='.$grades;
//拆分,对成绩进行分割
$grades = explode ( " ", $grades1 );
$allGrades = 0;
//遍历
foreach ( $grades as $k => $v ) {
//echo "<br/>$k=$v";
$allGrades += $v; //隐藏转换 string->float
}
?>
<!-- o1 提交给自己 -->
<form action="array12.php" method="post"><input type="text" name="grade" value="<?php echo $grades1?>" />
<!-- ○3这一句话就行了 -->
<input type="submit" value="开始统计" />
</form>
<?php
echo "平均成绩是=" . round ( $allGrades / count ( $grades ), 2 );
// ○2 round(,)方法
?>
</body>
</html>
如何关闭notice级别的提示
1,在php.ini文件中,改动error_reporting
改为:
error_reporting = E_ALL & ~E_NOTILCE
2,在你想禁止notice错误提示的页面加入下面的 代码
/*Report all errors except E_NOTICE*/
error_reporting(E_ALL^E_NOTICE);