1、PHP常用数组函数
实例演示代码:
<?php
// ## 键名相关
// `array_keys`: 获取所有键名组成的数组
$arr = ['id'=>10, 'username'=>'dashu', 'email'=>'dashu@qq.com'];
print_r(array_keys($arr)); echo '<hr>';
// `array_key_exists`: 是否存在指定键名
echo (array_key_exists('email', $arr) ? '存在' : '不存在') . '<hr>';
// `array_key_last`" 获取最后一个键名php7.3+
echo array_key_last($arr) . '<hr>';
// `array_key_first`: 获取第一个键名php7.3+
echo array_key_first($arr) . '<hr>';
echo '<hr>';
// ## 查询与替换
$arr = ['macbook pro', 'Dell', 'Lenovo', 'Hp', 'ThinkPad', 'Huawei', 'Xiaomi'];
// `array_rand`: 从数组中随机取出一个或多个元素的键名
echo array_rand($arr) .'<br>';
echo $arr[array_rand($arr)] . '<br>';
print_r(array_rand($arr, 4));
foreach (array_rand($arr, 3) as $key) {
echo $arr[$key] . '<br>';
}
echo '<hr>';
// `array_column`: 获取多维数组中一列组成的新数组
$arr = [
['id'=>101, 'name'=>'张无忌', 'age'=>20],
['id'=>102, 'name'=>'朱元章', 'age'=>30],
['id'=>103, 'name'=>'常遇春', 'age'=>40],
];
$column = array_column($arr, 'name');
$column = array_column($arr, 'name', 'id');
print_r($column); echo '<hr>';
// `array_replace` 使用后面数组的值替换第一个数组的值, 同名的键名会彼此覆盖,适合自定义配置参数
$arr = ['type'=>'mysql', 'host'=>'localhost', 'username'=>'root', 'password'=>'root'];
$arr1 = ['host'=>'127.0.0.1', 'username'=>'admin'];
$arr2 = ['username'=>'peter', 'password'=>'123456'];
print_r(array_replace($arr, $arr1, $arr2)); echo '<hr>';
// `array_intersect`: 计算数组的交集
$arr1 = [10, 20, 30, 40];
$arr2 = [1, 20, 30, 5];
print_r(array_intersect($arr1, $arr2)); echo '<hr>';
// `array_diff`:返回数组的差集
print_r(array_diff($arr1, $arr2)); echo '<hr>';
echo '<hr>';
// 分割与合并
// `array_combine`: 通过合并两个数组来创建一个新数组
$keys = ['type', 'host', 'dbname', 'username', 'password'];
$values = ['mysql', 'localhost', 'phpedu', 'root', 'root'];
$values = array_combine($keys, $values);
print_r($values); echo '<hr>';
// `array_merge`: 把一个或多个数组合并为一个数组
$default= ['host'=>'localhost', 'username'=>'root', 'password'=>'root'];
$custom = ['username'=>'admin', 'password'=>'123456'];
$config = array_merge($default, $custom);
print_r($config); echo '<hr>';
// `array_chunk`: 将一个数组分割成多个子数组
// print_r(range(1,5));
$arrs = array_chunk(range(1,20), 6);
print_r($arrs);
echo '<hr>';
// 数组指针
$arr = ['id' => 1, 'name' => '张无忌', 'gender' => '男', 'age' => 20];
// `key`: 获取当前元素的键名, `current`: 获取当前元素的值
echo key($arr) . ' => ' . current($arr) . '<hr>';
// `next`: 将数组中的内部指针向前移动一位
next($arr);
echo key($arr) . ' => ' . current($arr) . '<hr>';
// `end`: 将数组的内部指针指向最后一个单元
end($arr);
echo key($arr) . ' => ' . current($arr) . '<hr>';
// `prev`: 将数组的内部指针倒回一位
prev($arr);
echo key($arr) . ' => ' . current($arr) . '<hr>';
// `reset`: 将数组的内部指针指向第一个单元
reset($arr);
echo key($arr) . ' => ' . current($arr) . '<hr>';
// 自动生成
// `array_fill`: 用给定的值填充数组
print_r(array_fill(0, 5, 'dashu')); echo '<hr>';
// `array_fill_keys`: 使用指定的键和值填充数组
// 先创建一个键名数组
$keys = ['id', 'name', 'age', 'hoppy'];
print_r(array_fill_keys($keys, '张无忌')); echo '<hr>';
// `array_pad`: 以指定长度将一个值填充进数组
$arr = ['iphone', 'xiaomi', 'huawei'];
print_r(array_pad($arr, 6, 'mobile'));
echo '<hr>';
// 类型转换相关
// `list`: 将数组中的值赋予一组变量(类似解构赋值)
// 索引数组转变量
list($id, $name) = [10, '张无忌'];
echo "\$id = $id, \$name = $name <br>";
// 关联数组也支持php7+
list('id'=>$id, 'name'=>$name) = ['id'=>20, 'name'=>'张无忌'];
echo "\$id = $id, \$name = $name <br>";
// 取一部分值
list(,,$email) = [10, '张无忌', 'zhangwuji@qq.com'];
echo $email . '<br>';
// `implode`: 将数组元素按指定字符拼装成字符串
$arr = ['huawei', 'xiaome', 'apple', 'oppo', 'vivo'];
echo implode(', ', $arr) . '<br>';
// `explode`: 将字符串分割为数组
$str = 'blue, green, yellow, red, coral';
print_r(explode(', ', $str)); echo '<hr>';
// `extract`: 将关联数组拆分成变量名值对
$arr = ['host'=>'localhost', 'username'=>'root', 'password'=>'123456'];
extract($arr);
echo "host=$host; username=$username; password=$password <br>";
// `compact`: 将一组变量名值对拼装成一个关联数组键值对
$id = 99;
$name = '张无忌';
$job = 'jiaozhu';
// $arr = ['id'=>$id, 'name'=>$name, 'job'=>$job];
// print_r($arr);
print_r(compact('id', 'name', 'job'));
演示代码效果图:
2、四个数组回调函数
实例演示代码:
<?php
// 回调处理
// `array_filter`: 用回调函数过滤数组中的单元
$arr = [10, null, 73, false, 26, 'demo', 30, 35, 99,];
print_r($arr);echo '<br>';
// 过滤掉数组中的空值/假值
// 返回为true的值组成的数组
print_r(array_filter($arr));echo '<br>';
print_r(array_filter($arr, function($value) {
return $value > 30;
}));
echo '<hr>';
// `array_map`: 为数组的每个元素应用回调函数
$arr = [2, 5, 8, 10];
print_r(array_map(function($value){return $value*2;}, $arr));
echo '<br>';
// 同时处理多个数组
$keys = ['host', 'username', 'password'];
$values = ['localhost', 'admin', '666888'];
$result = array_map(function ($value1, $value2) {
return [$value1=>$value2];
}, $keys, $values);
print_r($result);
echo '<hr>';
// array_reduce(): 用回调函数迭代地将数组简化为单一的值
$res = array_reduce($result, function ($prev, $current) {
// 获取当前元素的键值
$key = key($current);
$value = current($current);
// 拼装成一个元素并返回
$prev[$key] = $value;
return $prev;
});
print_r($res);
echo '<hr>';
// array_walk(): 使用自定义回调对数组中成员逐个处理,返回布尔值
// array_walk(数组, 回调,回调的第三个数组的默认值)
// 主要用于数组成员 的格式化, 不受数组指针影响
$res = ['id'=>20, 'name'=>'无忌', 'email'=>'wuji@qq.com'];
array_walk($res, function($value, $key, $color) {
printf('[ %s ] => <span style="color:%s">%s</span><br>',$key,$color, $value );
},'blue');
演示代码效果图:
3、array_slice()
和array_splice()
函数
实例演示代码:
<?php
$arr = ['iphone', 'vivo', 'oppor', 'oneplus', 'sumsung', 'Huawei', 'Xiaomi'];
print_r($arr); echo '<hr>';
// `array_slice`: 从数组中取出一部分
print_r(array_slice($arr, 2, 2)); echo '<hr>';
// `array_splice`: 去掉数组中一部分并用其它值代替
print_r(array_splice($arr, 3)); echo '<hr>';
print_r($arr); echo '<hr>';
print_r(array_splice($arr, 3, 2)); echo '<hr>';
print_r($arr); echo '<hr>';
print_r(array_splice($arr, 3, 2, ['chuizi', 'redmi'])); echo '<hr>';
print_r($arr); echo '<hr>';
演示代码效果图:
4、总结
函数很多,十分重要,没什么好说的,只有多写多记。给自己定个小目标,课后再写他20遍。