3.4. 其它数组函数
持之以恒,方得始终!
操作数组指针
每个数组都有一个内部指针,指向了当前元素。
current()
获取当前指针所在的元素值
比如我们创建一个新数组,此时,数组指针就指向了第一个元素。我们可以 current($arr)
来获取。
next()
将指针前移一个元素,并返回当前指针所指向的元素值
reset()
重置数组指针
即回归到第一个元素上。并返回第一个元素值。
end()
将数组指针指向最后一个元素
同时返回最后一个元素值。
prev()
回移指针一个位置
和next()相反,它是将指针往回移一个位置,并返回其值。
end(),prev() 反向遍历一个数组
上面的函数组合起来,可以实现按任何顺序读取的数组。
array_walk()
对数组每一个元素,应用自定义的函数
其实你可以理解为它是这样的:
$otherdata = ...
foreach($arr as $key => $value) {
myfunc($value, $key, $otherdata);
}
看下函数原型array_walk(array|object &$array, callable $callback, mixed $arg = null): bool
其实和前面章节中的 usort()
类似,把自己的函数,当作参数传给 array_walk()
,或者直接把参数写为一个匿名函数也可。
说下参数:
- 第一个参数是要处理的数组。
- 第二个参数是自己写的函数,也就是要作用于数组中的每个元素的函数。
- 第三个参数是可选的,将这个参数传给我们自定义的函数。
我们自定义的函数一般是这样的
// 参数:元素值,元素key,其它额外数据
function myfuc($value, $key, $otherdata) {
...
}
function my_print($value) {
echo "$value \n";
}
$arr = ['a', 'b', 'c'];
array_walk($arr, 'my_print');
我们可以看到上面自定义函数的第一个参数是这样的 &$value
, 它是引用传递,修改了它,会直接生效到数组中。
count()
获取数组元素的个数
$arr = ['name' => 'xxx', 'age' => 111, 'love' => 'php'];
var_dump(count($arr)); // int(3)
array_count_values()
每个值出现的次数
$arr = [4, 5, 1, 2, 3, 1, 2, 1];
print_r(array_count_values($arr));
/* Array
(
[4] => 1
[5] => 1
[1] => 3
[2] => 2
[3] => 1
) */
extract() 将数组转为标量变量
一般针对的是关联数组,因为如果变量名称是 $0,$1,$2
,就不对了。
它是一个数组中的 key,变为变量名称,value 就是该变量的值。
$arr = ['name' => 'BYD', 'type' => 'car', 'price' => '20w'];
extract($arr);
echo "$name - $type - $price"; // BYD - car - 20w
它还有两个可选参数
- extract_type, 假如和已有的变量重名,默认是覆盖已有变量,或者我们可以设置一个前缀,将其设置为 EXTR_PREFIX_ALL, 并且要给第三个参数。
- prefix, 给定一个前缀。如果发生有同名变量,可以自动加上前缀。
如有任何侵权行为,请通知我删除,谢谢大家!
个人邮箱:865460609@qq.com