目录
0x00 操作数组的系统函数
复习:var_dump和print_r打印数组的区别
<?php
$arr = ['xidian','xdu'];
print_r($arr);
echo '<br/>';
echo $arr;
echo '<br/>';
var_dump($arr);
echo '<br/>';
die($arr);
?>
结果:
Array ( [0] => xidian [1] => xdu )
Array
array(2) { [0]=> string(6) "xidian" [1]=> string(3) "xdu" }
Array
结论:
只有print_r 和 var_dump可以完整打印数组
print_r 干净!只打印数组的键值对
var_dump 不仅打印键值对 还打印 值的数据类型。
1.数组的键值操作
(1)array_reverse(数组):传入一个数组,返回数组的逆序数组,原数组不变
<?php
$arr = ['xidian','xdu','cs'];
$ret = array_reverse($arr);
print_r($arr);
print_r($ret);
?>
(2)array_values(数组):传入一个关联数组,返回对应的索引数组。原数组不变
<?php
$arr = ['uni'=>'xidian','major'=>'cs'];
$ret = array_values($arr);
print_r($arr);
print_r($ret);
?>
(3)array_keys(数组):获取数组的键,组成一个索引数组并返回。原数组不变
<?php
$arr = ['uni'=>'xidian','major'=>'cs'];
$ret = array_keys($arr);
print_r($arr);
print_r($ret);
?>
(4)in_array(变量,数组):判断一个变量在不在一个数组中。
区别:bool is_array(变量) 判断一个变量是不是数组。
<?php
$arr = ['uni'=>'xidian','major'=>'cs'];
var_dump(in_array('xidian',$arr));
?>
(5)array_search(变量,数组):返回变量在数组中的索引。如果没有这个变量返回false
<?php
$arr = ['uni'=>'xidian','major'=>'cs'];
var_dump(array_search('xidian',$arr));
?>
(6)array_key_exists(键名,数组名) :判断一个数组中有没有这个键
(7)array_flip(键):键和值交换位置。
统计元素个数和唯一性
1.count(数组)
2.array_count_values(数组) 统计数组中每个值出现的次数
<?php
$arr = ['uni'=>'xidian','major'=>'cs','habbit'=>'cs',111,222,111];
var_dump(array_count_values($arr));
?>
array(4) { ["xidian"]=> int(1) ["cs"]=> int(2) [111]=> int(2) [222]=> int(1) }
3.array_unique(数组) 传入一个数组,返回一个"集合"
<?php
$arr = ['uni'=>'xidian','major'=>'cs','habbit'=>'cs',111,222,111];
var_dump(array_unique($arr));
?>
array(4) { ["uni"]=> string(6) "xidian" ["major"]=> string(2) "cs" [0]=> int(111) [1]=> int(222) }
4.array_sum(数组) 传入一个数组,返回其中值的和
<?php
$arr = ['uni'=>'xidian','major'=>'cs','habbit'=>'cs',111,222,111];
var_dump(array_sum($arr));
?>
0x01 栈和队列
1.array_push(数组,元素)元素入栈
返回值为数组中元素的个数。
2.array_pop(数组) 元素出栈,返回值为出栈的栈顶元素
<?php
$arr =[];
array_push($arr,1);
array_push($arr,2);
array_push($arr,3);
print_r($arr);
$ret = array_pop($arr);
var_dump($ret);
print_r($arr);
?>
3.array_unshift(数组,元素)头插法,返回值为数组中元素的个数。
4.array_shift(数组) 删除第一个元素。返回值为被删除的元素。
5.unset(数组[索引]) 删除数组中对应索引的元素,没有返回值。
6.array_rand(数组) 随机返回数组中的一个元素的键名。
7.shuffle(数组) 将传入数组打乱。如果是关联数组,打乱后将变成索引数组。
0x02 数组的合并拆分交集差集
1.array_merge(数组1,数组2) :
@将两个数组合并
@返回值为合并后的数组
@注意:如果合并的两个数组中,键名有重复的,后面的数组将覆盖前面的数组的值。
如果想完全保留原有的数组并只想新的数组附加到后面,用+运算符;表示在数组1之后追加数组2。即索引相同的保留1,索引不同的加到1后面。
<?php
$arr1 =[1,2,'b'=>3];
$arr2 =['b'=>34,32,'c'=>11];
//$ret = array_merge($arr1,$arr2);//[1,2,'b'=>34,32,'c'=>11]
$ret = $arr1+$arr2;//[1,2,'b'=>3,32,'c'=>11]
print_r($arr1);
print_r($arr2);
print_r($ret);
?>
2.array_combine(数组1,数组2):
@以数组1的元素为键,数组2的元素为值。返回一个新的关联数组
<?php
$arr1 =['username','age'];
$arr2 =['liudehua',55];
$ret = array_combine($arr1,$arr2);
print_r($ret);
?>
3.array_slice(数组,起始索引,[长度])
@从起始索引开始切割数组
@可以指定切割的长度,返回值为切割好的数组。
3.array_diff(数组1,数组2)
@返回值为 数组1-数组2
4.array_diff_key(数组1,数组2)
@比较两个数组的键名,并返回差集:数组1-数组2(键值对)
<?php
$a1=array("a"=>"red","b"=>"green","c"=>"blue");
$a2=array("a"=>"red","c"=>"blue","d"=>"pink");
$result=array_diff_key($a1,$a2);
print_r($result);//Array ( [b] => green )
?>
5.array_intersect(数组1,数组2)
返回数组1和数组2 的交集。采用数组1的索引。
0x03 数组排序
1.bool sort(数组):从小到大排序
2.bool rsort(数组):从大到小排序
3.bool asort(数组):从小到大排序 保留键,即数组中的元素调整顺序后,原来的键是多少,还是多少。
4.bool arsort(数组):从小到大排序 保留键
5.bool ksort(数组):按键排序,从小到大
6.bool krsort(数组):按键排序 从大到小
0x04 数组的回调函数
1.call_user_function_array(函数名,参数数组)
将数组的元素作为函数的参数,调用该函数。
<?php
function test($a,$b){
echo $a+$b;
}
call_user_func_array('test',[2,3]);
?>
2.array_map(函数名,数组)
数组中有多少个元素,就调用函数名多少次。第一次将数组中第一个元素赋值给函数的参数,第二次将数组中第二个元素。。。
<?php
function test($a){
echo strtoupper($a);
}
array_map(test,['a','b','c']);
?>
3.array_work(数组,函数名,间隔符)
数组中有多少个元素,就调用该函数多少次,将元素的键值对赋值给数组的参数1和参数2,将间隔符赋值给数组的第三个元素。
<?php
function test($value,$key,$c){
echo $key.$c.$value;
}
$arr = ['a'=>'hello','b'=>'world'];
array_walk($arr,test,'==');
?>
4.explode(分隔符,字符串) 以分割符为间隔将字符串转化为数组
5.implode(分隔符,数组) 将数组转化为字符串