演示数组
$stu = ['id' => 1, 'name' => 'Jack', 'course' => 'php', 'score' => 90];
key() : 当前键名
current(): 当前值
printf('[ %s ] => %s<br>', key($stu), current($stu));
next(): 指针前移
将当前获取的的目标变成后面一个 比如上一段代码获取了第一个,使用next之后会获取第二个
next($stu);
printf('[ %s ] => %s<br>', key($stu), current($stu));
prev(): 指针后移
将当前获取的的目标变成前面一个
prev($stu);
printf('[ %s ] => %s<br>', key($stu), current($stu));
reset(): 指针重置,指向第一个
reset($stu);
printf('[ %s ] => %s<br>', key($stu), current($stu));
end(): 指针指向最后一个
end($stu);
printf('[ %s ] => %s<hr>', key($stu), current($stu));
foreach 遍历数组
语法:foreach(当前数组名 as 健名=>对应的值){执行方法}
foreach ($stu as $key=>$value) {
printf('[ %s ] => %s<br>', $key, $value);
}
在PHP中,有一个list 用来解构数组
1.索引数组解构
list($name, $price) =['手机', 5000];
echo $name, ', ', $price , '<br>';
2.关联数组解构
list('name'=>$name, 'price'=>$price) =['name'=>'电脑','price'=> 9000];
echo $name, ', ', $price , '<br>';
小案例
$users = [
['id' => 5, 'name' => 'Mike'],
['id' => 8, 'name' => 'John'],
['id' => 14, 'name' => 'Jerry'],
];
foreach ($users as list('id'=>$id, 'name'=>$name)) {
printf('id = %s, name = %s<br>', $id, $name);
}
array_values(): 将数组的值,组成一个新数组,键名会重置
$arr = [0=>1, 2=>88, 3=>'10js', 10=>'1js', 6=>88];
printf('<pre>%s</pre>', print_r(array_values($arr), true));
in_array(查询元素,查询数组): 查询某个元素是否在这个数组中, true/ false
echo(in_array('php', $arr) ? '有' : '没有');
array_search(查询元素,查询数组) :查询某个元素是否在这个数组中,如果在则返回当前元素的索引
$key = array_search('js', $arr);
echo $key, ', ', $arr[$key];
array_unique(): 去掉数组中重复的元素
$arr = [0=>1, 2=>88, 3=>'10js', 10=>'1js', 6=>88];
@print_r(array_unique($arr));
count($arr) 当前数组的元素数量/获取当前数组长度
echo count($arr)
array_count_values(),统计数组每个值的出现频率
print_r(array_count_values($arr), true)
array_sum($arr) 求和’
返回当前数组所有数值的和(字符串视为0)
array_sum($arr)
array_product($arr) 求积
返回当前所有数值相乘的积,如果有字符串则会返回0
array_product($arr)
栈操作: 成员的增删,只允许在数组的一端进行
和JS一样的操作
push() 尾部增加
pop() 尾部删除
unshift()头部增加
shift() 头部删除
这个也可以进行循环队列的操作(JS轮播图的操作)
尾部追加, 头部删除
array_push(), array_shift()
头部追加, 尾部删除
array_unshift(), array_pop()
1.值排序
sort($arr):升序(会重置键名)
asort($arr):值升序排序,但是保持键名
rsort($arr);降序(会重置键名)
arsort($arr);值降序排序,但是保持键名
2.键排序
ksort($arr); 正排序
krsort($arr);反排序
3.冒泡排序
usort(目标数组,回调函数)
usort($arr, function ($a, $b) {
// return $a - $b;
// 降序
return $b - $a;
});
4.shuffle($arr); 随机打乱数组
$stu = [
'id' => 101,
'name' => '无忌',
'age' => 20,
'course' => 'php',
'grade' => 80
];
array_slice() 取出一部分成员组成一个新数组
三个参数:目标数组,起始索引,取值数量(从起始索引开始取x个值)
$res = array_slice(
$stu,
-4,
3
);
array_splice(): 增删改
删除(这个函数默认就是删除)
三个参数:目标数组,起始索引,删除数量
$res=array_splice($arr, 1, 2);
替换
四个参数:目标数组,起始索引,删除数量,删除几个就补上几个(直接用数组添加进去)
$res=array_splice($arr, 1, 2, [666,999]);
增加
增加就是将替换的第三个参数,删除数量改为0 ,然后直接添加参数,因为没有删除东西,所以新数组会直接在起始索引的地方追加进去
$res=array_splice($arr, 1, 0, [666,999]);
$arr = [
150,
'php',
true,
[4, 5, 6],
(new class () {
}),
[],
null,
false,
'',
0,
'0'
];
array_filter(),只返回数组中为true的元素组成的数组
一半只需要第一个参数,就是直接写入目标数组名就可以,第二个参数是一个函数,不用写,如果需要对返回的值进行二次过滤就通过第个参数,传入一个函数进行二次过滤,并且还可以再次调用进行多次过滤
$res = array_filter($arr, function ($item) {
// return $item;
// 只返回标量/基本数据类型
return is_scalar($item);
});
array_map() 对每个成员 ,做回调处理,返回新数组
这个参数会会将所有元素 拉平并返回新数组
拉平可以理解为将里面所有元素全部处理成字符串,如果有函数的话会直接将返回值输出成新数组的一个元素
$arr = [
'php',
[3, 4, 5],
(new class () {
public string $name = '电脑';
public int $price = 8888;
}),
15,
20
];
array_reduce(): 迭代/归并处理函数
语法:
有三个参数,第一个是目标数组,第二个是一个回调函数,这个回调函数也有两个值(累加结果,当前值)第三个是 运行基数(从几开始)
$res = array_reduce($arr, function ($acc, $cur) {}
$arr = [1,2,3,4,5,6];
$res = array_reduce($arr, function ($acc, $cur) {
echo $acc, ', ' , $cur, '<br>';
return $acc + $cur;
}, 10);
array_walk(): 使用自定义函数进行回调处理,返回布尔值
语法
array_walk(数组, 回调,回调的第三个数组的默认值)