Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:数组函数虽然多, 常用的并不多, 并且有不少功能是重复的, 完全掌握并不难的
$arr = ['id'=>10, 'name'=>'小明', 'sex'=>'男'];
// 获取数组中的键名
// 1.手动获取
echo key($arr),'<br>';
next($arr);
echo key($arr),'<br>';
next($arr);
echo key($arr),'<br>';
echo '<hr>';
// 2.while循环获取
reset($arr);
while(key($arr)){
$a[] = key($arr);
next($arr);
}
echo "<pre>".print_r($a,true)."</pre><hr>";
// 3.使用系统函数array_keys()获取键名
echo "<pre>".print_r(array_keys($arr),true)."</pre><hr>";
// 4.array_key_exists()函数判断键名是否存在
echo array_key_exists('sex',$arr)? '键名存在': '键名不存在','<br>';
echo array_key_exists('age',$arr)? '键名存在': '键名不存在','<hr>';
// 5.获取数组第一个或者最后一个的键名(主要用于数组内数据多的时候操作)
// 获取第一个键名
echo array_key_first($arr),'<br>';
// 获取最后一个键名
echo array_key_last($arr),'<hr>';
// 获取数组中的值
// 1.foreach()函数
foreach ($arr as $value) {
$v[] = $value;
}
echo "<pre>" . print_r($v, true) . "</pre><hr>";
// 2.用系统函数array_values()获取
echo "<pre>" . print_r(array_values($arr), true) . "</pre><hr>";
// 3.判断值是否存在
echo in_array('html', $arr) ? '值存在' : '值不存在', '<br>';
echo in_array('css', $arr) ? '值存在' : '值不存在', '<br>';
// 4.根据值获取键名(如果存在返回键名,如果不存在返回false)
var_dump(array_search('php', $arr));
var_dump(array_search('php1', $arr));
// 5.去除数组中相同的值
echo "<pre>" . print_r(array_unique($arr), true) . "</pre>";
$arr = [];
// 从尾部进栈
echo array_push($arr, 10, 20, 'PHP', 'JAVA'), '<br>';
print_r($arr);
echo '<hr>';
// 从尾部出栈,先进的元素后出(删除数组中的数据并返回元素的值)
echo array_pop($arr), '<br>';
echo array_pop($arr), '<br>';
echo array_pop($arr), '<br>';
echo array_pop($arr), '<hr>';
// 从头部进栈,
echo array_unshift($arr, 20, 'C++', 'python'), '<br>';
array_unshift($arr, 'php');
array_unshift($arr, '汇编');
print_r($arr);
echo '<hr>';
// 从头部出栈,(删除数组中的数据并返回元素的值)
echo array_shift($arr), '<br>';
echo array_shift($arr), '<br>';
echo array_shift($arr), '<br>';
echo array_shift($arr), '<br>';
echo array_shift($arr), '<hr>';
$arr = [];
// 尾部进入,头部出值
array_push($arr, 'JAVA');
array_push($arr, 'PHP');
array_push($arr, 'C++');
print_r($arr);
echo '<br>';
// 从头部出值
echo array_shift($arr), '<br>';
echo array_shift($arr), '<br>';
echo array_shift($arr), '<hr>';
// 头部进入,尾部出值
array_unshift($arr, 'JAVA');
array_unshift($arr, 'PHP');
array_unshift($arr, 'C++');
print_r($arr);
echo '<br>';
// 尾部出值
echo array_pop($arr), '<br>';
echo array_pop($arr), '<br>';
echo array_pop($arr), '<br>';
// 数组中的值排序
$arr = [25, 'php', 85, 'html'];
echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';
// 默认按值的升序排列使用sort()键名会重排,使用asort()键名不会重排
asort($arr);
echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';
// 键名重新排列
sort($arr);
echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';
// 自定义函数(效果和sort是一样的,键名也会重排)
usort($arr, function ($a, $b) {
return $a <=> $b;
});
// 键名排序
$arrs = ['b' => 5, 'a' => 8, 'c' => 10];
echo "<pre>" . print_r($arrs, true) . "</pre>", '<hr>';
// 键名升序排列
ksort($arrs);
echo "<pre>" . print_r($arrs, true) . "</pre>", '<hr>';
// 键名降序排列
krsort($arrs);
echo "<pre>" . print_r($arrs, true) . "</pre>", '<hr>';
// 自然排序(用于字符串中有数字和其他字母的排序)
$txts = ['temp2.txt', 'temp15.txt', 'temp10.txt', 'temp8.txt'];
echo "<pre>" . print_r($txts, true) . "</pre>", '<hr>';
// 标准排序
sort($txts);
echo "<pre>" . print_r($txts, true) . "</pre>", '<hr>';
// 自然排序
natsort($txts);
echo "<pre>" . print_r($txts, true) . "</pre>", '<hr>';
标准排序
自然排序
// array_slice():第一个参数为需要取值的数组,第二个参数为从什么位置开始取,第三个参数为取几个
$arr = ['id' => 12, 'name' => '小红', 'sex' => '女', 'taste' => 'php'];
echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';
$a = array_slice($arr, 1, 3);
echo "<pre>" . print_r($a, true) . "</pre>", '<hr>';
// 第二个参数可以为负数
$b = array_slice($arr, -2, 2);
echo "<pre>" . print_r($b, true) . "</pre>", '<hr>';
// array_splice()函数,(返回值为被操作了的值)
// 第一个参数为需要操作的数组,第二个参数为从哪个位置开始操作,
// 第三个参数为要操作几个值(为0则是数组的增加操作)
// 如果写入第四个参数那么是数组的替换数值或者增加数值
$int = [10, 15, 85, 75, 12, 48, 82, 54];
$int1 = [10, 15, 85, 75, 12, 48, 82, 54];
$int2 = [10, 15, 85, 75, 12, 48, 82, 54];
echo "<pre>" . print_r($int, true) . "</pre>", '<hr>';
// 删除操作
$a = array_splice($int, 2, 3);
echo "<pre>" . print_r($int, true) . "</pre>", '<hr>';
// 替换操作
$b = array_splice($int1, 2, 3, [222, 333, 444]);
echo "<pre>" . print_r($int1, true) . "</pre>", '<hr>';
// 增加操作
$c = array_splice($int2, 2, 0, [999, 888, 777]);
echo "<pre>" . print_r($int2, true) . "</pre>", '<hr>';
// array_combine()将两个数组合并,一个数组作为键名,一个数组作为值
$key = ['id', '小红', '女', 'PHP'];
$value = [1, 'name', 'sex', 'taste'];
echo "<pre>" . print_r(array_combine($key, $value), true) . "</pre>", '<hr>';
// array_merge()将一个或多个数组合并为一个数组
echo "<pre>" . print_r(array_merge($key, $value), true) . "</pre>", '<hr>';
// array_filter()函数:过滤掉空值
$arr = ['php', [], 13, false, (new class
{
}), null, 'java', 0, [1, 3, 5]];
// 过滤掉元素值不能转换true的值
echo "<pre>" . print_r(array_filter($arr), true) . "</pre>", '<hr>';
// 过滤掉数组中的复合数据类型和特殊数据类型
$a = array_filter($arr, function ($i) {
return is_scalar($i);
});
echo "<pre>" . print_r($a, true) . "</pre>", '<hr>';
$arrs = ['php', 13, (new class
{
public $name = '小明';
public $sex = '男';
public $taste = 'php';
}), 'java', [1, 3, 5]];
// 操作:如果值为数组则转为字符串输出,为对象则获取之中的值输出,否则直接输出
$aa = array_map(function ($i) {
// 判断
switch (gettype($i)) {
case 'object':
$i = get_object_vars($i);
case 'array':
$i = implode(',', $i);
}
return $i;
}, $arrs);
echo "<pre>" . print_r($aa, true) . "</pre>", '<hr>';
// extract()函数:将关联数组拆分为变量
$arr = ['id' => 12, 'name' => '小红', 'sex' => '女', 'taste' => 'php'];
extract($arr);
echo $id . '<br>' . $name . '<br>' . $sex . '<br>' . $taste . '<hr>';
// compact()函数可以把一组变量转为关联数组
$id = 2;
$name = '小明';
$sex = '男';
$taste = 'JAVA';
echo "<pre>" . print_r(compact('id', 'name', 'sex', 'taste'), true) . "</pre>", '<hr>';
总结
1.了解了更多的数组函数
2.课后查看手册便于了解课上没讲到的数组函数
3.多练习代码,以便于掌握