首页 > 代码库 > PHP学习笔记——7.数组

PHP学习笔记——7.数组

1.数组的定义

  若干数据,希望有关联性,且不想定义成多个变量,即可定义为数组

  一:数组的编号是唯一的,用于区分单元

  编号 => 键/key(关联数组)、索引/index(索引数组)、下标(俗称)

  二:存储的内容称为 值/value

2.数组的声明

  数组即使键/值对的集合

  方法一:初始化方式

  $arr = null;

  $arr[‘键1‘] = ‘值1‘;

  $arr[‘键2‘] = ‘值2‘;

  ...

  方法二:array结构方式

  $arr = array(‘key1‘=>‘value1‘,‘key2‘=>‘value‘...);

  方法三:自动分配索引方式

  $arr = array(‘value1‘,‘value2‘...);

  PHP会自动由0开始分配索引值

3.数组的下标该怎么写

  $arr = array(1=>‘中‘,‘name‘=>‘张三‘);

  echo $arr[1],$arr[‘1‘],$arr["1"]; =>中 中 中

  虽然都得到了结果,但需要把字符串的‘1‘,"1"先转换,

  在寻找单元,影响了效率

  所以,数字的下标是不必加单/双引号的

  echo $arr[name],$arr[‘name‘],$arr["name"]; =>张三 张三 张三

  不加单/双引号,PHP会优先将其当成常量进行解析

  若没有该常量,才将其解析为字符串

  所以,字符串下标需要加单/双引号以避免因常量定义而产生的错误

  又因单引号比双引号解析快,所以优先加单引号

4.数组单元值的类型

  所有八种类型均可,即数组的值仍可是一个数组(称为二维/多维数组)

  使用 数组[‘键‘][‘键‘]; 可找到二维数组中的值

5.数组的遍历

  foreach(数组变量 as [键变量=>]值变量 ) {

  ...

  }

  遍历数组的每个单元,把单元的键赋予给键变量,把单元的值赋予给值变量

6.数组的游标操作

  current(数组变量); =>取出指针指向单元的值;指针初始化指向第0个单元

  key(数组变量); =>取出指针指向单元的键

  next(数组变量); =>将指针向尾部移一位

  prev(数组变量); =>将指针向头部移一位

  end(数组变量); =>将指针指向最后一个单元上

  reset(数组变量); =>将指针重置指向第0个单元

  用for配合游标操作进行数组遍历:

  for( ;current($arr);next($arr)){

  echo key($arr),‘:‘,current($arr);

  }

  当current($arr)条件的值为" ",0,false,‘0‘,null时,条件为假,循环退出

7.list与each

  each(数组变量); =>将指针指向当前单元的信息组成一个数组,且指针向尾部移一位

  所得数组为:array(1=>‘value‘;value=http://www.mamicode.com/>‘value‘;0=>‘key‘;key=>‘key‘;)

  使用each进行数组遍历

  while($ceil=each($arr)){

  echo $ceil[0],‘~‘,$ceil[1];

  或 echo $ceil[key],‘~‘,$ceil[value];

  }

  each经常与list配合使用

  list是重合赋值语句,可以一次性为多个变量赋值

  在实际应用中,常用于——将数组的单元分配赋予给多个变量

  例:$arr = array(‘春‘,‘夏‘,‘秋‘,‘冬‘);

  list($spr,$sum,$fall,$win)=$arr;

  echo $spr; =>春

  按list中的变量从左向右依次对应数组中的单元(由下标0开始)

  若数组中有某个单元不存在,则当做null处理

  例:list($a,$b,$c)=array(2=>‘赵‘,3=>‘钱‘,1=>‘孙‘);

  echo $a,$b,$c; =>null 孙 赵

  注意:分配是由左向右的,而赋值的过程是反向的

  例:list($arr[0],$arr[1],,$arr[2])=

  array(3=>‘赵‘,1=>‘钱‘,5=>‘孙‘,2=>‘李‘,0=>‘燕‘);

  print_r($arr);

  分配: 赋值:

  $arr[0] => array[0] $arr[2] = 赵

  $arr[1] => array[1] $arr[1] = 钱

  => array[2] $arr[0] = 燕

  $arr[2] => array[3]

  使用each与list配合的方式进行数组遍历

  function for_each($arr){

  while(list($k,$v) each($arr)){

  echo $k,$v;

  }

  }

  $arr = array(..);

  for_each($arr);

8.数组函数

  count(数组变量,[true]); =>计算数组中的单元数量

  传入的可以是数组,也可以是非数组

  而返回值则根据传入参数分为:

  数组:单元数量(不进入多维数组中计算)

  null:0

  非数组/非null:1

  当输入可选参数true时,则按照递归方式计算数量

  递归:即进入多维中计算数量

  如:$arr = array(‘a‘,‘b‘,array(‘c‘,‘d‘));

  则 echo count($arr,true); =>5

  一维中有:a b array() 二维中有:c d 共5个

  array_key_exists(‘key‘,$arr); =>判断数组中是否有该键

  isset($arr[‘key‘]);也具有该作用

  二者区别:

  isset是语法结构,省去了一次函数调用,速度快

  单因其是根据键值进行判断的,若出现有键值为null时,则返回false

  总结:如果数组是动态生成,不好判断键与值时,用array_key_exists保险些

  is_array(‘value‘,$arr); =>判断数组中是否有该值

  array_flip($arr); =>将数组中的键与值对调

  range(开始,结束); =>生成一个指定范围的数组

  array_sum($arr); =>计算数组中所有单元值的和

  shuffle($arr); =>打乱数组中单元值的顺序,返回bool值,可用print_r进行输出

  array_unique($arr); =>去除数组中重复的单元值,不改变键名

  array_reverse($arr,[true]); =>将数组中的单元值倒序

  sort($arr); =>为数组中的单元值进行从小到大的排序

  默认不影响数字索引,增加true才可倒序数字索引

  关于队列和栈:队列即先进先出 而栈即后进先出

  array_push($arr,‘新单元‘); =>往数组尾部追加单元,并返回单元数量

  array_pop($arr); =>输出数组尾部单元,并将其从数组中删除

  array_unshift($arr,‘新单元‘) =>往数组头部追加单元,并返回单元数量

  array_shift($arr); =>输出数组头部单元,并将其从数组中删除

  若为数字索引,则由0重新计数

 

作者:@zhnoah
出处:http://www.cnblogs.com/zhnoah/
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连 
接,否则保留追究法律责任的权利。

PHP学习笔记——7.数组