首页 > 代码库 > 数组(1)

数组(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 )

数组(1)