PHP 数组的分类
一维 二维数组
PHP中不存几维的概念,只有键和值得对应关系。数组的递归。
关联数组,索引数组
关联数组: 索引数组:
$stus=array{ $stus=array{'张三','李四','王二','王五'};
'name'=>'张三',
'age'=>30,
'hobby'=>'打球'
};
键值操作:
array_keys(数组);获取所有的键
array_values(数组);获取所有的值
in_array('值',数组);是否存在某个值
array_key_exists('键',数组);是否存在某个键
判断某个元素是否存在。典型的是使用isset();来判断
isset($array['键']);
array_fill();填充数组
数组 = array_fill(起始下标,填充的元素个数,填充的值);
array_combine();利用两个数组合并成一个数组,其中一个作为键,一个作为值
int mt_rand(2,10);在2~10之间取一个随机数
array_chunk($array,n);拆分数组,原则是子数组每个组内n个元素。array_merge()合并数组。
explode('分隔符',数组);将字符串依据某个分隔符,分割成多个数组 常用 与implode成对出现,使用相同分隔符
implode('分隔符',数组);将数组内的元素,利用某个分隔符,连接成一个字符串。
字符串函数:str_split('abcd'),分割成一个数组。
array_intersect($arr1,$arr2);计算两个数组的交集,找到在$arr1中存在,也在$arr2中存在的元素,数据是出现在第一个参数中的
array_diff($arr1,$arr2);计算两个数组的差集。找到在$arr1中存在,但是在$arr2中不存在的元素
array_push();入栈 array_pop();出栈 入栈出栈与删除元素和增加元素使用[]不同,入栈出栈会重新索引,保证所有的元素都是由0开始逐一递增。
但是如果只是想单纯地增加一个元素,用[]的形式比较好。应为入栈做的工作较多,效率比较低。 入栈出栈严格维护
array_shift();顶端出,array_unshift();顶端进。 尾端是push跟pop,顶端是shift跟unshift。
回调函数:array_map(function(),数组);可以针对数组的每一个元素的值,去调用某个函数!比较适合索引数组
array_map('max',数组,···);典型功能:一次性处理多个数组,可以同时将多个相同位置的参数,传递到一个函数内!
array_map(null,数组,···);处理多个数组时,默认操作是将三个数组合并成一个数组。形成一个二维数组
array_walk(数组,function($value,$key))类似于foreach
$arr = array(
array('name'=>'张三','age'=>'30','porst'=>'打球','sex'=>'男'),
array('name'=>'李四','age'=>'30','porst'=>'打球','sex'=>'男')
);
$arr = array(
'name'=>'张三',
'age' =>'20',
'hobby'=>array(0=>'打球',1=>'骑马',2=>'钓鱼',3=>'喝酒','sports'=>array('投石','射箭','跑步'))
);
echo count($stu_infos);//值为2
echo count($stu_infos,true); //值为8 count 获取数组元素个数, 可以设置第二个参数true,表示是否递归统计
foreach 遍历数组
$names = array(
'李子','梨子','例子','粒子','栗子','离子'
);
//foreach(遍历的数组 AS 键变量 => 值变量)
next($names);next($names); //移动指针,
//foreach 首先要初始化数组元素指针,所以还是从指针默认指向的第一个元素开始遍历 不会受next($names)影响。
foreach($names as $k => $v){
var_dump($k,$v);
echo '<br>';
}
var_dump(key($names));
echo '<hr>';
//foreach (遍历的数组 AS 值变量){
//循环体
//}
//
//
// foreach($names AS $value){ //foreach 遍历之前 首先初始化数组元素指针。
// var_dump($value);
// echo '<br>';
// }
//
//
//
//foreach($names as $key => $value){
// $key+=10;
// $value.='子';
// var_dump($key,$value);
// echo '<br>';
//}
//var_dump($names); //不会影响原数组键和值
//foreach($names as $key =>& $value){//$value= $names[$key] //值变量可以引用 传递,但是$key键变量不能引用传递。
// $value.='子';
// var_dump($key,$value);
// echo '<br>';
//}
//var_dump($names);
foreach($names as $key => $value){ //foreach 遍历的是原数组的拷贝,而不是在原数组上做的操作
//在遍历的过程中,如果对原数组做操作,是不会影响到遍历结果的
var_dump($key,$value);
echo '<br>';
//$names[6]='墨子';
//$names[]='new element';
}
var_dump($names);
echo '<hr>';
foreach($names as $key => $value):
var_dump($key,$value);
if($key==3):
break;
endif;
echo '<br>';
endforeach;
var_dump($names);
数组指针的操作
利用php的内置函数:
key
current
next();//移动到上一个
prev();//下一个
reset();//重置,移动到第一个
end();//移动到uzihou一个元素上
注意一旦指针位置非法,则不能做相对移动(next,prev),可以绝对移动(rest,end)。
reset使用频率较高!
each(), 集合了key,current,和 next 三者的功能!将当前元素信息获得后,移动指针到下一个元素上!
元素信息数组 = each($arr)移动指针
注意,元素信息数组。是两种表示反感:索引和关联 其中:
索引:0,1分别表示 键和值
关联:key,value分别表示 键和值
$names = array(
'李子','梨子','例子','粒子','栗子','离子'
);
var_dump(each($names));
输出结果:
//array(4) {
// [1]=> string(4) "李子"
// ["value"]=> string(4) "李子"
// [0]=> int(0)
// ["key"]=> int(0)
//}
$names = array(
'李子','梨子','例子','粒子','栗子','离子'
);
next($names);
next($names);
prev($names);
echo current($names);
echo '<hr>';
end($names);
prev($names);
echo current($names);
echo '<hr>';
end($names);
next($names);
prev($names);
end($names);
var_dump(current($names));