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=>‘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/
本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连
接,否则保留追究法律责任的权利。