数组(1)
一、数组的定义方式:
数组是一种存储数据的方式,可以存储多个值,每个值用不同的键来区分。
键->箱子上的编号
值->箱子里面的内容
1 $arr = array('name'=>'wangwu','age'=>'10');//定义一个数组 2 print_r($arr); 3 echo '<br/>'; 4 echo $arr['name'];//访问数组键为name所对应的值
二、数组的类型
数组的分类:索引数组;关联数组;二维数组;多维数组
1、索引数组--键不必有特殊意义,纯数字从0递增的数组,这种叫“索引数组”。
1 $arr = array(0=>'a',1=>'b',2=>'c',3=>'d'); 2 print_r($arr);
2、关联数组
字符串做键,一般能体现该单元的内容。
1 $arr = array('name'=>'wangwu','age'=>'10','hobby'='basketball');//关联数组
2 print_r($arr);
3、二维数组、多维数组
$arr2 = array('name'=>'lisi','age'=>25,'hobby'=>array('football','pingpang'));
三、数组键规则
1、键可以不分配,系统会0,1,2、、、递增分配
$arr = array('a','b','c');
print_r($arr);
2、如果有的键分配,有的不分配,会从之前的键中,取最大的键开始递增
1 $arr1 = array('name'=>'lisi','age'=>'23','running'); 2 print_r($arr1);
运行结果:
Array ( [name] => lisi [age] => 23 [0] => running )
1 $arr2= array(0=>'a',1=>'b','c',5=>'d','e','f'); 2 print_r($arr2);
运行结果:
Array ( [0] => a [1] => b [2] => c [5] => d [6] => e [7] => f )
1 $arr2= array(0=>'a',1=>'b','c',5=>'d','e','f'); 2 print_r($arr2);
运行结果:
Array ( [0] => a [1] => b [2] => c [5] => d [6] => e [7] => f )
3、如果键分配重复了怎么办
对于数组它的键是不能重复的
如果键重复,后面的同名键会覆盖前面的
1 $arr3 = array('a','b','c',2=>'d',2=>'e'); 2 print_r($arr3);
Array ( [0] => a [1] => b [2] => e )
注意:
数组的键只有两种类型,整型和字符串
键为浮点型,字符串型的整数,和null
键为浮点数->向下取整
如果字符串恰好理解为一个整数,也转为整数
null按空字符串来理解
1 $arr = array(2=>'今',2.5=>'天',2.5=>'是','2'=>'周',null=>'末'); 2 3 print_r($arr);
运行效果:
Array ( [2] => 周 [] => 末 )
在实际开发中:
不会遇到这些比较麻烦的数组
一般是关联数组和自动生成的索引数组
四、操作数组单元
数组是一个复合数据,里面放了很多数据 print_r()将里面所有的数据都打印了出来 需要对数组的具体单元进行操作 数组单元的 增,删,改,查
1.单独取出某一个单元的值,用键来取 $数组名[键]
1 $arr = array('a','b','c'); 2 echo $arr[1];
运行结果:
b
2、取出二维数组的值
数组的层级顶多到3层,否则无法直观的理解
1 $arr2 = array('name'=>'lisi','age'=>23,'hobby'=>array('basketball','football','pingpang')); 2 echo $arr2['hobby'][0];
basketball
3、更改一个数组单元的值
1 $arr2 = array('name'=>'lisi','age'=>23,'hobby'=>array('basketball','football','pingpang')); 2 $arr2['hobby'][0] = 'swiming'; 3 print_r($arr2);
运行结果:
Array ( [name] => lisi [age] => 23 [hobby] => Array ( [0] => swiming [1] => football [2] => pingpang ) )
4、增加一个数组单元
1 $arr2 = array('name'=>'lisi','age'=>23,'hobby'=>array('basketball','football','pingpang')); 2 $arr2['area'] = 'beijing'; 3 print_r($arr2);
运行结果:
Array ( [name] => lisi [age] => 23 [hobby] => Array ( [0] => basketball [1] => football [2] => pingpang ) [area] => beijing )
5、删除数组单元
1 $arr2 = array('name'=>'lisi','age'=>23,'hobby'=>array('basketball','football','pingpang')); 2 unset($arr2['hobby']); 3 print_r($arr2);
运行结果:
Array ( [name] => lisi [age] => 23 )
五、遍历数组
1、取出数组的每个单元
1 $arr = array('a','b','c','d'); 2 echo $arr[0].'<br/>'; 3 echo $arr[1].'<br/>'; 4 echo $arr[2].'<br/>'; 5 echo $arr[3].'<br/>';
运行结果:
a
b
c
d
1 $arr = array('a','b','c','d'); 2 for($i=0;$i<count($arr);$i++){ 3 echo $arr{$i},'<br/>'; 4 }
2、关联数组如何取出每个数组单元?
它的键是字符串,没有任何规律,foreach是专门用来循环数组的,
速度非常快,foreach里面的键值的变量名($k,$v)为任意合法的变量名
1 $arr = array('name'=>'zhangsan','age'=>24,'area'=>'beijing'); 2 foreach($arr as $k=>$v){ 3 echo $k,':',$v,'<br/>'; 4 }
name:zhangsan
age:24
area:beijing
3、只循环值
1 $arr = array('name'=>'zhangsan','age'=>24,'area'=>'beijing'); 2 foreach($arr as $v){ 3 echo $v,'<br/>'; 4 }
运行结果:
zhangsan
24
beijing
4.array_keys — 返回数组中所有的键名 foreach 没有办法单循环取出健
1 $arr = array('name'=>'zhangsan','age'=>24,'area'=>'beijing'); 2 3 print_r(array_keys($arr));
运行结果:
Array ( [0] => name [1] => age [2] => area )
5.把下面这个的数组的每个单元值变成原来的 2 倍
1 $stu = array('san'=>3,'lisi'=>4,'wang'=>5,'zhao'=>5); 2 foreach($stu as $k=>$v){ 3 $stu[$k] = $v*2; 4 } 5 print_r($stu);
Array ( [san] => 6 [lisi] => 8 [wang] => 10 [zhao] => 10 )