一、键和值
1. array_keys:拿键
$arr = ['id' => 1, 'name' => 'admin', 'email' => '123@qq.com'];
print_r(array_keys($arr));
2. array_values:拿值
$arr = [0 => 1, 5 => 8, 2 => 'php', 'id' => 'html', 12 => 15, 15];
print_r(array_values($arr));
3. array_key_exists:判断键在不在数组中?
echo array_key_exists('email', $arr) ? '存在' : '不存在';
4. in_array:查询某个值在不在数组中?
echo in_array('php1', $arr) ? '有' : '没有';
5. array_key_first/last:拿第一个键,最后一个键
echo array_key_first($arr);
echo array_key_last($arr);
6. array_search:根据值找键,如果这个值不存在,返回布尔false
var_dump(array_search('php', $arr));
7. array_unique:把重复的值删除,有两个15重复的
print_r(array_unique($arr));
8. array_sum:求和
$arr = [5, 8, 10];
echo array_sum($arr);
// 把字符串也转成数值了
echo "<hr>";
$arr = [5, 8, 10, '555'];
echo array_sum($arr);
// 字符串开头是字母,就忽略了
echo "<hr>";
$arr = [5, 8, 10, 'p555'];
echo array_sum($arr);
二、栈和队
1. array_pop:最后的先出来,在栈尾部增删
$stack = [];
echo array_push($stack, 10, 20, 50);
print_r($stack);
echo array_pop($stack);
echo array_pop($stack);
echo array_pop($stack);
var_dump(array_pop($stack));
2. array_shift:在栈头部增删
echo array_unshift($stack, 10, 20, 50);
print_r($stack);
echo array_shift($stack);
echo array_shift($stack);
echo array_shift($stack);
3. array_push:尾部进队; array_shift:头部出队
$queue = [];
array_push($queue, 10, 40, 60);
print_r($queue);
echo array_shift($queue);
echo array_shift($queue);
echo array_shift($queue);
4. array_unshift:头部进队; array_pop:尾部出队
array_unshift($queue, 1, 3, 5);
print_r($queue);
echo array_pop($queue);
echo array_pop($queue);
echo array_pop($queue);
三、键与值排序
1. asort:值排序,但是键不动,值先从字母顺序开始; sort:默认按值升序,键重组
$arr = [10, 12, 15, 20, 'b', 't', 55, 66];
asort($arr);
print_r($arr);
$arr = [10, 12, 15, 20, 'b', 't', 55, 66];
sort($arr);
print_r($arr);
2. ksort:按键排序,字母顺序,升序排; krsort:键降序
$arr = ['d' => 50, 'b' => 12, 'p' => 15];
ksort($arr);
print_r($arr);
$arr = ['d' => 50, 'b' => 12, 'p' => 15];
krsort($arr);
print_r($arr);
3. natsort:图片名字从小到大排升序
$arr = ['img1.jpg', 'img9.jpg', 'img2.jpg', 'img5.jpg'];
print_r($arr);
natsort($arr);
print_r($arr);
四、array_slice:从数组中取出一部分元素
1. 取前2个,从负3开始取
$stu = ['id' => 2, 'name' => '小芳', 'age' => 25, 'course' => 'php', 'grade' => 90];
$res = array_slice($stu, 0);
// 只取前2个
$res = array_slice($stu, 0, 2);
$res = array_slice($stu, 1, 3);
// 从负3开始取
$res = array_slice($stu, -3);
2. array_splice:新增两个
$arr = [2, 5, 10, 42, 12, 75, 60];
$res = array_splice($arr, 2, 0, [777, 666]);
print_r($res);
print_r($arr);
五、array_combine:数组合并
$keys = ['type', 'host', 'dbname', 'username', 'password'];
$values = ['mysql', 'localhost', 'phpedu', 'root', 'root'];
print_r(array_combine($keys, $values));
六、回调
1. array_filter():过滤,简单写法,过滤空值,只返回标量
$arr = [10, 'php', true, [4, 5, 6], (new class{}), [], null, false, '', 0, '0'];
$res = array_filter($arr, function ($item) {
return is_scalar($item);
});
print_r($res);
2. array_map():不会区分真假,全部返回新数组
$arr = ['php', [1, 2, 3], (new class{public $name = '手机'; public $price = 8999;}), 10, 30];
$res = array_map(function ($item) {
// 判断当前元素是对象还是数组?gettype
// object是对象,如果是对象,就获取属性
// array是数组,如果是数组,就进行拼接,转为字符串,输出
switch (gettype($item)) {
case 'object':
$item = get_object_vars($item);
$item = implode(', ', $item);
break;
case 'array':
$item = implode(', ', $item);
}
return $item;
}, $arr);
print_r($res);
3. compact():将一组变量组装成关联数组
$id = 1;
$username = 'admin';
$gender = '女';
print_r(compact('id', 'username', 'gender'));